{"action":"created","comment":{"url":"https://api.github.com/repos/aspnet/Docs/pulls/comments/38602649","id":38602649,"diff_hunk":"@@ -1,8 +1,376 @@\n-.. include:: /../common/stub-topic.txt\n-\n-|stub-icon| Authoring Tag Helpers\n+Authoring Tag Helpers\n ===========================================\n \n-.. include:: /../common/stub-notice.txt\n+By `Rick Anderson`_\n+\n+    - `Getting started with Tag Helpers`_\n+    - `Starting the email tag helper`_\n+    - `A working email tag helper`_\n+    - `The bold tag helper`_\n+    - `Web site information tag helper`_\n+    - `Condition tag helper`_\n+    - `Avoiding tag helper conflicts`_\n+    - `Inspecting and retrieving child content`_\n+    - `Wrap up and next steps`_\n+\n+You can browse the source code for the sample app used in this document on `GitHub <https://github.com/aspnet/Docs/tree/master/mvc/views/tag-helpers/authoring/sample>`__. \n+\n+Getting started with tag helpers\n+------------------------------------\n+\n+This tutorial provides an introduction to programming tag helpers. :doc:`intro` describes the benefits that tag helpers provide.\n+\n+A tag helper is any class that implements the `ITagHelper <https://github.com/aspnet/Razor/blob/dev/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/ITagHelper.cs>`__ interface. However, when you author a tag helper, you generally derive from `TagHelper <https://github.com/aspnet/Razor/tree/dev/src/Microsoft.AspNet.Razor.Runtime/TagHelpers>`__ because doing so gives you access to the methods and properties that are required. We will introduce the ``TagHelper`` methods and properties as we use them in this tutorial.\n+\n+#. Create a new ASP.NET MVC 6 project called **AuthoringTagHelpers**. You won't need authentication for this project.\n+#. Create a folder to hold the tag helpers called *TagHelpers*. The *TagHelpers* folder is not required, but it is a reasonable convention. Now let's get started writing some simple tag helpers.\n+\n+Starting the email tag helper\n+--------------------------------\n+\n+In this section we will write a tag helper that updates an email tag. For example:\n+\n+``<email>Support</email>``\n+\n+The server will use our email tag helper to convert that markup into the following:\n+\n+.. code-block:: HTML\n+\n+\t<a href=\"mailto:Support@example.com\">Support@example.com</a>\n+\n+That is, an anchor tag that makes this an email link. You might want to do this if you are writing a blog engine and need it to send email for marketing, support, and other contacts, all to the same domain.\n+\n+#. Add the following ``EmailTagHelper`` class to the *TagHelpers* folder.\n+\n+.. literalinclude:: authoring/sample/TagHlp/src/AuthoringTagHelpers/TagHelpers/z1EmailTagHelperCopy.cs\n+   :language: c#\n+   :lines: 2-16\n+   \n+Notes: \n+\n+- The ``TargetElement`` attribute identifies \"email\" as the element to target for processing. If you don't specify a ``TargetElement`` attribute, ASP.NET MVC 6 uses a naming convention that targets elements of the root class name (minus the *TagHelper* portion of the class name). You could comment out this attribute (because the class is named **Email**\\TagHelper), and it would target email tags. Using the attribute does make the intention explicit (that is, we are targeting **<email>** tags).\n+- The ``EmailTagHelper`` class derives from `TagHelper <https://github.com/aspnet/Razor/tree/dev/src/Microsoft.AspNet.Razor.Runtime/TagHelpers>`__. The ``TagHelper`` class provides the rich methods and properties we will examine in this tutorial.\n+- The override ``Process`` method executes the tag helper.  The ``TagHelper`` class also provides an asynchronous version (``ProcessAsync``) with the same parameters.  \n+- The context parameter to ``Process`` (and ``ProcessAsync``) contains information associated with the current HTML tag. We will use the context parameter to get the content of our target element.\n+- The output parameter to ``Process`` (and ``ProcessAsync``) contains a stateful HTML element used to generate an HTML tag and content.\n+- Our class name has a suffix of **TagHelper**. This is not required, but it is a good convention.\n+\n+2. To make the ``EmailTagHelper`` class available to all our Razor views, we will add the ``addTagHelper`` directive to the *Views/_ViewImports.cshtml* file:  \n+\n+.. literalinclude:: authoring/sample/TagHlp/src/AuthoringTagHelpers/Views/_ViewImports.cshtml\n+   :language: aspx-cs\n+   :lines: 1-3\n+   :emphasize-lines: 3\n+\n+To add a tag helper to a view, you first add the fully qualified name (``AuthoringTagHelpers.TagHelpers.EmailTagHelper``), and then the DLL name (*AuthoringTagHelpers*). You typically add tag helpers to the *Views/_ViewImports.cshtml* file as we've done here, but it's more common to use wildcard syntax to bring in all tag helpers with one line, as the following shows:\n+\n+.. literalinclude:: authoring/sample/TagHlp/src/AuthoringTagHelpers/Views/_ViewImportsCopy.cshtml\n+   :language: aspx-cs\n+   :lines: 2-4\n+   :emphasize-lines: 2,3\n+\n+.. This is a comment\n+\n+When you use the wildcard syntax, you don't need to use the fully qualified name. Also, note that the second line brings in the `ASP.NET 5 MVC 6 tag helpers <https://github.com/aspnet/Mvc/tree/dev/src/Microsoft.AspNet.Mvc.TagHelpers>`__ using the wild card syntax (Those helpers are discussed in :doc:`intro`.) It's the ``@addTagHelper`` command that makes the tag helper available to the Razor view.\n+   \n+3. Update the markup in the *Views/Home/Contact.cshtml* file with these changes:\n+\n+.. literalinclude::  authoring/sample/TagHlp/src/AuthoringTagHelpers/Views/Home/Contact.cshtml\n+   :language: aspx-cs\n+   :emphasize-lines: 15-16\n+   :lines: 1-17\n+   \n+4. Run the app and use your favorite browser to view the HTML source so you can verify that the email tag is replaced with anchor markup (``<a>Support</a>``). Support is rendered as a link, but it doesn't have an ``href`` attribute to make it functional. We'll fix that in the next section.\n+\n+Note: Like `HTML tags and attributes <http://www.w3.org/TR/html-markup/documents.html#case-insensitivity>`__, tags, class names and attributes in Razor, C# and VB are not case-sensitive.\n+\n+A working email tag helper\n+----------------------------------\n+In this section, we will update the ``EmailTagHelper`` so that it will create a valid anchor tag for email. We'll update our tag helper to take information from a Razor view (in the form of a ``mail-to`` attribute) and use that in generating the anchor.\n+\n+Update the ``EmailTagHelper`` class with the following code:\n+\n+.. literalinclude:: authoring/sample/TagHlp/src/AuthoringTagHelpers/TagHelpers/EmailTagHelperMailTo.cs\n+   :lines: 7-24\n+   :dedent: 3\n+\n+Notes:\n+\n+- The ASP.NET 5 runtime translates C# and VB Pascal-cased classes and property names for tag helpers into `lower kebab case <http://stackoverflow.com/questions/11273282/whats-the-name-for-dash-separated-case/12273101#12273101>`__. Therefore, to use the ``MailTo`` attribute, you'll use ``<email mail-to=\"value\"/>``.\n+- The following line shows how to set attributes:\n+\n+.. literalinclude:: authoring/sample/TagHlp/src/AuthoringTagHelpers/TagHelpers/EmailTagHelperMailTo.cs\n+   :lines: 7-24\n+   :dedent: 3\n+   :emphasize-lines: 15\n+\n+\n+3. Update the markup in the *Views/Home/Contact.cshtml* file with these changes:\n+\n+.. literalinclude::  authoring/sample/TagHlp/src/AuthoringTagHelpers/Views/Home/ContactCopy.cshtml\n+   :language: aspx-cs\n+   :emphasize-lines: 15-16\n+   :lines: 1-17\n+ \n+4. Run the app and verify that it generates the correct links.\n+\n+**Note:** If you were to write the email tag self-closing (``<email mail-to=\"Rick\" />``), the final output would also be self-closing. In our example, the output would be ``<a href=\"mailto:Rick@contoso.com\" />``. Self-closing anchor tags (also known as `void elements <http://www.w3.org/TR/html5/syntax.html#void-elements>`__) are not valid HTML, so you wouldn't want to create one, but you might want to create a tag helper for a void element. The ASP.NET 5 runtime sets the type of the ``TagMode`` property after reading a tag.\n+\n+\n+In this section we will update the ``EmailTagHelper`` so that it gets the target ``mail-to`` from the content. \n+\n+#. Update the ``EmailTagHelper`` class with the following code:\n+\n+.. literalinclude:: authoring/sample/TagHlp/src/AuthoringTagHelpers/TagHelpers/EmailTagHelper.cs\n+   :lines: 6-18\n+   :dedent: 3\n+\n+Notes:\n+\n+- We use the ``context`` parameter to get contents of the HTML element.\n+- The following line shows the syntax for adding attributes:\n+\n+.. literalinclude:: authoring/sample/TagHlp/src/AuthoringTagHelpers/TagHelpers/EmailTagHelper.cs\n+   :lines: 15\n+   :dedent: 12\n+   \n+That approach works for the attribute \"href\" as long as it doesn't currently exit in the attributes collection. You can also use the ``output.Attributes.Add`` method to add a tag helper attribute to the end of the collection of tag attributes.\n+\n+\n+- The last line sets the completed content for our minimally functional tag helper.\n+- This version uses the asynchronous ``ProcessAsync`` method. The asynchronous `GetChildContentAsync <https://github.com/aspnet/Razor/blob/dev/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperContext.cs#L65-L79>`__ returns a ``Task`` containing the `TagHelperContent <https://github.com/aspnet/Razor/blob/dev/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperContent.cs>`__. \n+\n+2. Run the app and verify that it generates  a valid email link.\n+    \n+\n+The bold tag helper\n+---------------------------\n+\n+#. Add the following ``BoldTagHelper`` class to the *TagHelpers* folder.\n+\n+.. literalinclude:: authoring/sample/TagHlp/src/AuthoringTagHelpers/TagHelpers/BoldTagHelper.cs\n+    :language: c#\n+\n+Notes:\n+\n+- The ``[TargetElement]`` attribute passes an attribute parameter that specifies that any HTML element that contains an HTML attribute value of \"bold\" will match, and the ``Process`` override method in the class will run. In our sample,  the ``Process``  method removes the \"bold\" attribute value and surrounds the containing markup with ``<strong></strong>``.\n+- Because we are keeping the tag content, we must write the opening tag with the ``PreContent.SetContent`` method and the closing tag with the ``PostContent.SetContent`` method.\n+\n+2. Modify the *About.cshtml* view to contain a ``bold`` attribute value. The completed code is shown below.\n+\n+.. literalinclude::  authoring/sample/TagHlp/src/AuthoringTagHelpers/Views/Home/About.cshtml\n+   :language: aspx-cs\n+   :emphasize-lines: 7-11 \n+   :lines: 1-11   \n+\n+      \n+3. Update the *Views/_ViewImports.cshtml* file to use the wildcard syntax we previously mentioned. That way, we won't have to update our file when we add new tag helpers.\n+\n+.. literalinclude:: authoring/sample/TagHlp/src/AuthoringTagHelpers/Views/_ViewImportsCopy.cshtml\n+   :language: aspx-cs\n+   :lines: 2-4\n+   :emphasize-lines: 2,3\n+  \n+4. Run the app. You can use your favorite browser to inspect the source and verify that the markup has changed as promised.\n+\n+The ``[TargetElement]`` attribute above only targets HTML markup that provides an attribute value name of \"bold\". The ``<bold>`` element was not modified by the tag helper.  \n+\n+5. Comment out the ``[TargetElement]`` attribute line and it will default to targeting ``<bold>`` tags, that is, HTML markup of the form ``<bold>``. (Remember, the default naming convention will match the class name **Bold**\\TagHelper to ``<bold>`` tags.)\n+\n+6. Run the app and verify that the ``<bold>`` tag is processed by the tag helper.\n+\n+Decorating a class with multiple ``TargetElement`` statements results in a logical-OR of the targets. For example, using the code below, a bold tag or a bold attribute will match.\n+\n+.. literalinclude:: authoring/sample/TagHlp/src/AuthoringTagHelpers/TagHelpers/zBoldTagHelperCopy.cs\n+   :language: c#\n+   :lines: 5-6\n+ \n+When multiple attributes are added to the same statement, the runtime treats them as a logical-AND. For example, in the code below, an HTML element must contain both a bold tag and a bold attribute to match.\n+\n+.. literalinclude:: authoring/sample/TagHlp/src/AuthoringTagHelpers/TagHelpers/zBoldTagHelperCopy2.cs\n+   :language: c#\n+   :lines: 5\n+\n+For a good example of a bootstrap progress bar that targets a tag and an attribute, see `Creating custom MVC 6 Tag Helpers <http://www.davepaquette.com/archive/2015/06/22/creating-custom-mvc-6-tag-helpers.aspx>`__.\n+\n+Web site information tag helper\n+------------------------------------\n+\n+#. Add a *Models* folder.\n+#. Add the following ``WebsiteContext`` class to the *Models* folder:\n+\n+.. literalinclude:: authoring/sample/TagHlp/src/AuthoringTagHelpers/Models/WebsiteContext.cs\n+    :language: c#\n+\n+3. Add the following ``WebsiteInformationTagHelper`` class to the *TagHelpers* folder.\n+\n+.. literalinclude:: authoring/sample/TagHlp/src/AuthoringTagHelpers/TagHelpers/WebsiteInformationTagHelper.cs\n+    :language: c#\n+\n+Notes: \n+\n+- As mentioned previously, the ASP.NET 5 runtime translates Pascal-cased C# class names and properties for tag helpers into `lower kebab case <http://c2.com/cgi/wiki?KebabCase>`__. Therefore, to use the ``WebsiteInformationTagHelper`` in Razor, you'll write ``<website-information />``.\n+- We are not explicitly identifying the target element with the ``TargetElement`` attribute, so the default of ``website-information`` will be targeted. If you applied the following attribute (note it's not kebab case but matches the class name):\n+\n+.. code-block:: c#\n+\n+\t    [TargetElement(\"WebsiteInformation\")]\n+\n+The lower kebab case tag ``<website-information />`` would not match. If you want use the ``TargetElement`` attribute, you would use kebab case as shown below:\n+\n+.. code-block:: c#\n+\n+\t    [TargetElement(\"Website-Information\")]\n+\n+- `Void elements <http://www.w3.org/TR/html5/syntax.html#void-elements>`_ (that is, an element with a self-closing tag) have no content. For this example, the Razor markup will use a self-closing tag, but the tag helper will be creating a `section <http://www.w3.org/TR/html5/sections.html#the-section-element>`__ element (which is not self-closing and we are writing content inside the ``section`` element). Therefore, we need to set the ``TagMode`` to ``StartTagAndEndTag`` to write output. Alternatively, you can comment out the line setting ``TagMode`` and write markup with a closing tag. (Example markup is provided later in this tutorial.)\n+\n+5. Add the following markup to the *About.cshtml* view. The highlighted markup displays the web site information.\n+\n+.. literalinclude::  authoring/sample/TagHlp/src/AuthoringTagHelpers/Views/Home/About.cshtml\n+   :language: aspx-cs\n+   :emphasize-lines: 13-20  \n+   :lines: 1-20\n+\n+Note: In the Razor markup shown below:\n+\n+.. literalinclude::  authoring/sample/TagHlp/src/AuthoringTagHelpers/Views/Home/About.cshtml\n+   :language: aspx-cs\n+   :lines: 15-20\n+   \n+Razor knows the ``info`` attribute is a class, not a string, and you want to write C# code. Any non-string tag helper attribute should be written without the ``@`` character.\n+\n+6. Run the app, and navigate to the About view to see the web site information.   \n+\n+Notes:\n+\n+- You can use the following markup with a closing tag and remove the line with ``TagMode.StartTagAndEndTag`` in the tag helper:\n+\n+.. literalinclude::  authoring/sample/TagHlp/src/AuthoringTagHelpers/Views/Home/AboutNotSelfClosing.cshtml\n+   :language: aspx-cs\n+   :lines: 15-20\n+\n+Condition tag helper\n+---------------------------------\n+\n+The condition tag helper renders output when passed a true value.\n+\n+#. Add the following ``ConditionTagHelper`` class to the *TagHelpers* folder.\n+\n+.. literalinclude:: authoring/sample/TagHlp/src/AuthoringTagHelpers/TagHelpers/ConditionTagHelper.cs\n+    :language: c#\n+    \n+2. Replace the contents of the *Views/Home/Index.cshtml* file with the following markup:\n+\n+.. literalinclude::  authoring/sample/TagHlp/src/AuthoringTagHelpers/Views/Home/Index.cshtml\n+   :language: aspx-cs\n+   :lines: 1-13\n+\n+3. Replace the ``Index`` method in the ``Home`` controller with the following code:\n+\n+.. literalinclude:: authoring/sample/TagHlp/src/AuthoringTagHelpers/Controllers/HomeController.cs\n+   :language: c#\n+   :lines: 9-18\n+   \n+4. Run the app and browse to the home page. The markup in the conditional ``div`` will not be rendered. Append  the query string ``?approved=true`` to the URL (for example, http://localhost:1235/Home/Index?approved=true). The approved is set to true and the conditional markup will be displayed.\n+\n+Note: We use the `nameof <https://msdn.microsoft.com/en-us/library/dn986596.aspx>`_ operator to specify the attribute to target rather than specifying a string as we did with the bold tag helper:\n+\n+.. literalinclude:: authoring/sample/TagHlp/src/AuthoringTagHelpers/TagHelpers/zConditionTagHelperCopy.cs\n+    :language: c#\n+    :lines: 7-21\n+    :emphasize-lines: 1,2,6","path":"mvc/views/tag-helpers/authoring.rst","position":285,"original_position":285,"commit_id":"c1c69f54363235e68769f3e7e1958ade53792ee9","original_commit_id":"c1c69f54363235e68769f3e7e1958ade53792ee9","user":{"login":"Rick-Anderson","id":3605364,"avatar_url":"https://avatars.githubusercontent.com/u/3605364?v=3","gravatar_id":"","url":"https://api.github.com/users/Rick-Anderson","html_url":"https://github.com/Rick-Anderson","followers_url":"https://api.github.com/users/Rick-Anderson/followers","following_url":"https://api.github.com/users/Rick-Anderson/following{/other_user}","gists_url":"https://api.github.com/users/Rick-Anderson/gists{/gist_id}","starred_url":"https://api.github.com/users/Rick-Anderson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Rick-Anderson/subscriptions","organizations_url":"https://api.github.com/users/Rick-Anderson/orgs","repos_url":"https://api.github.com/users/Rick-Anderson/repos","events_url":"https://api.github.com/users/Rick-Anderson/events{/privacy}","received_events_url":"https://api.github.com/users/Rick-Anderson/received_events","type":"User","site_admin":false},"body":"yes","created_at":"2015-09-03T00:33:36Z","updated_at":"2015-09-03T00:33:36Z","html_url":"https://github.com/aspnet/Docs/pull/419#discussion_r38602649","pull_request_url":"https://api.github.com/repos/aspnet/Docs/pulls/419","_links":{"self":{"href":"https://api.github.com/repos/aspnet/Docs/pulls/comments/38602649"},"html":{"href":"https://github.com/aspnet/Docs/pull/419#discussion_r38602649"},"pull_request":{"href":"https://api.github.com/repos/aspnet/Docs/pulls/419"}}},"pull_request":{"url":"https://api.github.com/repos/aspnet/Docs/pulls/419","id":44040191,"html_url":"https://github.com/aspnet/Docs/pull/419","diff_url":"https://github.com/aspnet/Docs/pull/419.diff","patch_url":"https://github.com/aspnet/Docs/pull/419.patch","issue_url":"https://api.github.com/repos/aspnet/Docs/issues/419","number":419,"state":"open","locked":false,"title":"new TH authoring article","user":{"login":"Rick-Anderson","id":3605364,"avatar_url":"https://avatars.githubusercontent.com/u/3605364?v=3","gravatar_id":"","url":"https://api.github.com/users/Rick-Anderson","html_url":"https://github.com/Rick-Anderson","followers_url":"https://api.github.com/users/Rick-Anderson/followers","following_url":"https://api.github.com/users/Rick-Anderson/following{/other_user}","gists_url":"https://api.github.com/users/Rick-Anderson/gists{/gist_id}","starred_url":"https://api.github.com/users/Rick-Anderson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Rick-Anderson/subscriptions","organizations_url":"https://api.github.com/users/Rick-Anderson/orgs","repos_url":"https://api.github.com/users/Rick-Anderson/repos","events_url":"https://api.github.com/users/Rick-Anderson/events{/privacy}","received_events_url":"https://api.github.com/users/Rick-Anderson/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-09-02T20:46:13Z","updated_at":"2015-09-03T00:33:36Z","closed_at":null,"merged_at":null,"merge_commit_sha":"82a88eab59506e6c6df7ae21fefa05f9accbc9b5","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/aspnet/Docs/pulls/419/commits","review_comments_url":"https://api.github.com/repos/aspnet/Docs/pulls/419/comments","review_comment_url":"https://api.github.com/repos/aspnet/Docs/pulls/comments{/number}","comments_url":"https://api.github.com/repos/aspnet/Docs/issues/419/comments","statuses_url":"https://api.github.com/repos/aspnet/Docs/statuses/c1c69f54363235e68769f3e7e1958ade53792ee9","head":{"label":"aspnet:riande-TH","ref":"riande-TH","sha":"c1c69f54363235e68769f3e7e1958ade53792ee9","user":{"login":"aspnet","id":6476660,"avatar_url":"https://avatars.githubusercontent.com/u/6476660?v=3","gravatar_id":"","url":"https://api.github.com/users/aspnet","html_url":"https://github.com/aspnet","followers_url":"https://api.github.com/users/aspnet/followers","following_url":"https://api.github.com/users/aspnet/following{/other_user}","gists_url":"https://api.github.com/users/aspnet/gists{/gist_id}","starred_url":"https://api.github.com/users/aspnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aspnet/subscriptions","organizations_url":"https://api.github.com/users/aspnet/orgs","repos_url":"https://api.github.com/users/aspnet/repos","events_url":"https://api.github.com/users/aspnet/events{/privacy}","received_events_url":"https://api.github.com/users/aspnet/received_events","type":"Organization","site_admin":false},"repo":{"id":28239455,"name":"Docs","full_name":"aspnet/Docs","owner":{"login":"aspnet","id":6476660,"avatar_url":"https://avatars.githubusercontent.com/u/6476660?v=3","gravatar_id":"","url":"https://api.github.com/users/aspnet","html_url":"https://github.com/aspnet","followers_url":"https://api.github.com/users/aspnet/followers","following_url":"https://api.github.com/users/aspnet/following{/other_user}","gists_url":"https://api.github.com/users/aspnet/gists{/gist_id}","starred_url":"https://api.github.com/users/aspnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aspnet/subscriptions","organizations_url":"https://api.github.com/users/aspnet/orgs","repos_url":"https://api.github.com/users/aspnet/repos","events_url":"https://api.github.com/users/aspnet/events{/privacy}","received_events_url":"https://api.github.com/users/aspnet/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/aspnet/Docs","description":"Documentation for ASP.NET 5","fork":false,"url":"https://api.github.com/repos/aspnet/Docs","forks_url":"https://api.github.com/repos/aspnet/Docs/forks","keys_url":"https://api.github.com/repos/aspnet/Docs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/aspnet/Docs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/aspnet/Docs/teams","hooks_url":"https://api.github.com/repos/aspnet/Docs/hooks","issue_events_url":"https://api.github.com/repos/aspnet/Docs/issues/events{/number}","events_url":"https://api.github.com/repos/aspnet/Docs/events","assignees_url":"https://api.github.com/repos/aspnet/Docs/assignees{/user}","branches_url":"https://api.github.com/repos/aspnet/Docs/branches{/branch}","tags_url":"https://api.github.com/repos/aspnet/Docs/tags","blobs_url":"https://api.github.com/repos/aspnet/Docs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/aspnet/Docs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/aspnet/Docs/git/refs{/sha}","trees_url":"https://api.github.com/repos/aspnet/Docs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/aspnet/Docs/statuses/{sha}","languages_url":"https://api.github.com/repos/aspnet/Docs/languages","stargazers_url":"https://api.github.com/repos/aspnet/Docs/stargazers","contributors_url":"https://api.github.com/repos/aspnet/Docs/contributors","subscribers_url":"https://api.github.com/repos/aspnet/Docs/subscribers","subscription_url":"https://api.github.com/repos/aspnet/Docs/subscription","commits_url":"https://api.github.com/repos/aspnet/Docs/commits{/sha}","git_commits_url":"https://api.github.com/repos/aspnet/Docs/git/commits{/sha}","comments_url":"https://api.github.com/repos/aspnet/Docs/comments{/number}","issue_comment_url":"https://api.github.com/repos/aspnet/Docs/issues/comments{/number}","contents_url":"https://api.github.com/repos/aspnet/Docs/contents/{+path}","compare_url":"https://api.github.com/repos/aspnet/Docs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/aspnet/Docs/merges","archive_url":"https://api.github.com/repos/aspnet/Docs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/aspnet/Docs/downloads","issues_url":"https://api.github.com/repos/aspnet/Docs/issues{/number}","pulls_url":"https://api.github.com/repos/aspnet/Docs/pulls{/number}","milestones_url":"https://api.github.com/repos/aspnet/Docs/milestones{/number}","notifications_url":"https://api.github.com/repos/aspnet/Docs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/aspnet/Docs/labels{/name}","releases_url":"https://api.github.com/repos/aspnet/Docs/releases{/id}","created_at":"2014-12-19T17:38:02Z","updated_at":"2015-09-02T19:47:38Z","pushed_at":"2015-09-02T22:27:25Z","git_url":"git://github.com/aspnet/Docs.git","ssh_url":"git@github.com:aspnet/Docs.git","clone_url":"https://github.com/aspnet/Docs.git","svn_url":"https://github.com/aspnet/Docs","homepage":null,"size":27277,"stargazers_count":173,"watchers_count":173,"language":"C#","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":178,"mirror_url":null,"open_issues_count":160,"forks":178,"open_issues":160,"watchers":173,"default_branch":"master"}},"base":{"label":"aspnet:1.0.0-beta7","ref":"1.0.0-beta7","sha":"e9d74015b6bdfbe823823bb7607549febd2822e2","user":{"login":"aspnet","id":6476660,"avatar_url":"https://avatars.githubusercontent.com/u/6476660?v=3","gravatar_id":"","url":"https://api.github.com/users/aspnet","html_url":"https://github.com/aspnet","followers_url":"https://api.github.com/users/aspnet/followers","following_url":"https://api.github.com/users/aspnet/following{/other_user}","gists_url":"https://api.github.com/users/aspnet/gists{/gist_id}","starred_url":"https://api.github.com/users/aspnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aspnet/subscriptions","organizations_url":"https://api.github.com/users/aspnet/orgs","repos_url":"https://api.github.com/users/aspnet/repos","events_url":"https://api.github.com/users/aspnet/events{/privacy}","received_events_url":"https://api.github.com/users/aspnet/received_events","type":"Organization","site_admin":false},"repo":{"id":28239455,"name":"Docs","full_name":"aspnet/Docs","owner":{"login":"aspnet","id":6476660,"avatar_url":"https://avatars.githubusercontent.com/u/6476660?v=3","gravatar_id":"","url":"https://api.github.com/users/aspnet","html_url":"https://github.com/aspnet","followers_url":"https://api.github.com/users/aspnet/followers","following_url":"https://api.github.com/users/aspnet/following{/other_user}","gists_url":"https://api.github.com/users/aspnet/gists{/gist_id}","starred_url":"https://api.github.com/users/aspnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aspnet/subscriptions","organizations_url":"https://api.github.com/users/aspnet/orgs","repos_url":"https://api.github.com/users/aspnet/repos","events_url":"https://api.github.com/users/aspnet/events{/privacy}","received_events_url":"https://api.github.com/users/aspnet/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/aspnet/Docs","description":"Documentation for ASP.NET 5","fork":false,"url":"https://api.github.com/repos/aspnet/Docs","forks_url":"https://api.github.com/repos/aspnet/Docs/forks","keys_url":"https://api.github.com/repos/aspnet/Docs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/aspnet/Docs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/aspnet/Docs/teams","hooks_url":"https://api.github.com/repos/aspnet/Docs/hooks","issue_events_url":"https://api.github.com/repos/aspnet/Docs/issues/events{/number}","events_url":"https://api.github.com/repos/aspnet/Docs/events","assignees_url":"https://api.github.com/repos/aspnet/Docs/assignees{/user}","branches_url":"https://api.github.com/repos/aspnet/Docs/branches{/branch}","tags_url":"https://api.github.com/repos/aspnet/Docs/tags","blobs_url":"https://api.github.com/repos/aspnet/Docs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/aspnet/Docs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/aspnet/Docs/git/refs{/sha}","trees_url":"https://api.github.com/repos/aspnet/Docs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/aspnet/Docs/statuses/{sha}","languages_url":"https://api.github.com/repos/aspnet/Docs/languages","stargazers_url":"https://api.github.com/repos/aspnet/Docs/stargazers","contributors_url":"https://api.github.com/repos/aspnet/Docs/contributors","subscribers_url":"https://api.github.com/repos/aspnet/Docs/subscribers","subscription_url":"https://api.github.com/repos/aspnet/Docs/subscription","commits_url":"https://api.github.com/repos/aspnet/Docs/commits{/sha}","git_commits_url":"https://api.github.com/repos/aspnet/Docs/git/commits{/sha}","comments_url":"https://api.github.com/repos/aspnet/Docs/comments{/number}","issue_comment_url":"https://api.github.com/repos/aspnet/Docs/issues/comments{/number}","contents_url":"https://api.github.com/repos/aspnet/Docs/contents/{+path}","compare_url":"https://api.github.com/repos/aspnet/Docs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/aspnet/Docs/merges","archive_url":"https://api.github.com/repos/aspnet/Docs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/aspnet/Docs/downloads","issues_url":"https://api.github.com/repos/aspnet/Docs/issues{/number}","pulls_url":"https://api.github.com/repos/aspnet/Docs/pulls{/number}","milestones_url":"https://api.github.com/repos/aspnet/Docs/milestones{/number}","notifications_url":"https://api.github.com/repos/aspnet/Docs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/aspnet/Docs/labels{/name}","releases_url":"https://api.github.com/repos/aspnet/Docs/releases{/id}","created_at":"2014-12-19T17:38:02Z","updated_at":"2015-09-02T19:47:38Z","pushed_at":"2015-09-02T22:27:25Z","git_url":"git://github.com/aspnet/Docs.git","ssh_url":"git@github.com:aspnet/Docs.git","clone_url":"https://github.com/aspnet/Docs.git","svn_url":"https://github.com/aspnet/Docs","homepage":null,"size":27277,"stargazers_count":173,"watchers_count":173,"language":"C#","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":178,"mirror_url":null,"open_issues_count":160,"forks":178,"open_issues":160,"watchers":173,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/aspnet/Docs/pulls/419"},"html":{"href":"https://github.com/aspnet/Docs/pull/419"},"issue":{"href":"https://api.github.com/repos/aspnet/Docs/issues/419"},"comments":{"href":"https://api.github.com/repos/aspnet/Docs/issues/419/comments"},"review_comments":{"href":"https://api.github.com/repos/aspnet/Docs/pulls/419/comments"},"review_comment":{"href":"https://api.github.com/repos/aspnet/Docs/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/aspnet/Docs/pulls/419/commits"},"statuses":{"href":"https://api.github.com/repos/aspnet/Docs/statuses/c1c69f54363235e68769f3e7e1958ade53792ee9"}}}}