{"action":"created","comment":{"url":"https://api.github.com/repos/OData/WebApi/pulls/comments/197592279","pull_request_review_id":131373650,"id":197592279,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDE5NzU5MjI3OQ==","diff_hunk":"@@ -0,0 +1,285 @@\n+---\n+layout: post\n+title: \"12.1 WebApi 7.0 Default Setting Updates\"\n+description: \"Desgin document for updated default settings for WebApi 7.0\"\n+category: \"12. Design\"\n+---\n+        \n+# WebApi Default Enable Unqualified Operations and Case-insensitive Uri #\n+\n+\n+Overview\n+========\n+\n+OData Layer\n+-----------\n+\n+OData libraries 7.x (current version 7.4.4) contains updates to improve\n+usability & compatibility of the library by virtue of exposing options\n+that can be set by the caller of the OData core library (ODL). Related\n+to request Uri parsing, the following two simplifications are now\n+available when URI parser is configured properly:\n+\n+-   As usual, namespace is the primary mechanism for resolving name\n+    token conflicts in multiple schema component of the model, therefore\n+    namespace is required up to OData v4. To improve flexibility, with\n+    notion of [Default\n+    Namespaces](http://docs.oasis-open.org/odata/odata/v4.01/cs01/part1-protocol/odata-v4.01-cs01-part1-protocol.html#sec_DefaultNamespaces)\n+    introduced in OData v4.01, namespace qualifier is optional for\n+    function or action identifier in request Uri. When corresponding\n+    option in ODL Uri parser enabled:\n+\n+    -   If the function or action identifier contains a namespace\n+        qualifier, as in all the original cases, Uri parser uses\n+        original namespace-qualified semantic to ensure backward\n+        compatibility;\n+\n+    -   Otherwise, URI parser will search among the main schema and\n+        referenced sub-schemas treated as default namespaces, trying to\n+        resolve the unqualified function & action identifier to unique\n+        function / action element.\n+\n+        -   Exception will be thrown if no matches are found, or\n+            multiple functions or actions of same name are found in\n+            different namespaces of the model.\n+\n+        -   Property with same name as unqualified function / action\n+            name could cause the token being bound to a property segment\n+            unexpectedly. This should be avoided per best design\n+            practice in OData protocol: \\\"Service designers should\n+            ensure uniqueness of schema children across all default\n+            namespaces, and should avoid naming bound functions,\n+            actions, or derived types with the same name as a structural\n+            or navigation property of the type.\\\"\n+\n+-   In OData v4.01, case-insensitive name resolution is supported for\n+    [system query\n+    options](http://docs.oasis-open.org/odata/odata/v4.01/cs01/part1-protocol/odata-v4.01-cs01-part1-protocol.html#sec_SystemQueryOptions),\n+    [built-in\n+    function](http://docs.oasis-open.org/odata/odata/v4.01/cs01/part1-protocol/odata-v4.01-cs01-part1-protocol.html#sec_BuiltinQueryFunctions)\n+    and\n+    [operator](http://docs.oasis-open.org/odata/odata/v4.01/cs01/part1-protocol/odata-v4.01-cs01-part1-protocol.html#sec_BuiltinFilterOperations)\n+    names, as well as type names, property names, enum values in form of\n+    strings. When corresponding option in ODL Uri parser is enabled, Uri\n+    parser first uses case-sensitive semantics as before and returns the\n+    result if exact match is found; otherwise, tries case-insensitive\n+    semantics, and returns the unique result found or throws exception\n+    for ambiguous result such as duplicated items.\n+\n+    -   Most of the case-insensitive support above has been implemented\n+        in current ODL version, except for minor bug fixes and\n+        case-insensitive support for built-in function, which are\n+        addressed as part of this task.\n+\n+    Note the above options are also combinatorial, with expected behavior for Uri parsing.\n+\n+    In ODL implementation, the primary support for the two options above is the default ODataUriResolver and its derived classes.\n+\n+WebApi Layer\n+------------\n+\n+WebApi layer utilizes dependency injection to specify various services\n+as options for URI parser. Dependencies can be specified in WebApi layer\n+overriding default values provided by the IServicesProvider container.\n+\n+With the new default values, WebApi will exhibit different behavior\n+related Uri parsing. The change should be backward compatible (all\n+existing cases should work as it used to be), and previous error cases\n+due to required case-sensitive and namespace qualifier for function\n+should become working cases, hence improving usability of OData stack.\n+\n+Scenarios\n+=========\n+\n+Write Scenario Description\n+--------------------------\n+\n+All scenarios are related to OData Uri parsing using default WebAPI\n+settings. All sample scenarios assume no name collisions in EDM model,\n+unless noted otherwise.\n+\n+### Functions: namespace qualified/unqualified\n+\n+With function defined in the model:\n+builder.EntityType\\<Customer\\>().Action(\\\"UpdateAddress\\\");\n+\n+-   Namespace qualified function should work as before:\n+\n+> POST /service/Customers(1)/Default.UpdateAddress()\n+\n+-   Namespace unqualified function should become a successful case:\n+\n+> POST /service/Customers(1)/UpdateAddress()\n+\n+### Case-Insensitive name resolution:\n+\n+-   Case-insensitive property name should become resolvable:\n+\n+    With model: public class InvalidQueryCustomer { public int <span style=\"color:red\">Id</span> { get; set; } }\n+\n+    > GET /service/InvalidQueryCustomers?\\$filter=<span style=\"color:blue\">id</span> eq 5 : HTTP 200\n+\n+    >GET /service/InvalidQueryCustomers(5)?\\$filter=<span style=\"color:blue\">id</span> eq 5 : HTTP 400 \"Query\n+options \\$filter, \\$orderby, \\$count, \\$skip, and \\$top can be applied\n+only on collections.\"\n+\n+-   Case-insensitive customer uri function name should become\n+    resolvable:\n+\n+    With model having entity type People defined and following customized Uri function:\n+      >\n+      > FunctionSignatureWithReturnType myFunc\n+      >\n+      > = new\n+      > FunctionSignatureWithReturnType(EdmCoreModel.Instance.GetBoolean(true),\n+      >\n+      > EdmCoreModel.Instance.GetString(true),\n+      > EdmCoreModel.Instance.GetString(true));\n+      >\n+      > // Add a custom uri function\n+      >\n+      > CustomUriFunctions.AddCustomUriFunction(<span style=\"color:red\">\\\"myMixedCasestringfunction\\\"</span>, myFunc);\n+\n+      This should work:\n+      > GET /service/People?\\$filter=<span style=\"color:blue\">mYMixedCasesTrInGfUnCtIoN</span>(Name,\\'BlaBla\\') : HTTP 200\n+\n+-   Combination of case-insensitive type & property name and unqualified\n+    function should become resolvable:\n+\n+     With controller:\n+\n+     > \\[HttpGet\\]\n+     > \n+     > public ITestActionResult CalculateTotalOrders(int key, int month) {/\\*...\\*/}\n+\n+     Following OData v4 Uris should work:\n+     > GET /service/Customers(1)/Default. CalculateTotalOrders (month=1) : HTTP 200\n+     > GET /service/CuStOmErS(1)/CaLcUlAtEToTaLoRdErS (MONTH=1) : HTTP 200\n+\n+Design Strategy\n+===============\n+\n+Dependency Injection of ODataUriResolver\n+----------------------------------------\n+\n+ODL (Microsoft.OData.Core) library supports dependency injection of a\n+collection of service types from client via the IServiceProvider\n+interface. The IServiceProvider can be considered as a container\n+populated with default objects by ODL, while ODL's client, such as\n+WebApi, can override default objects by injecting customized\n+dependencies.\n+\n+### ODL IContainerBuilder and ContainerBuilderExtensions\n+\n+The ContainerBuilderExtensions.AddDefaultODataServices(this\n+IContainerBuilder) implementation populates a collection of default\n+OData service objects into the container's builder. For example, default\n+service of type ODataUriResolver is registered as one instance of\n+ODataUriResolver as follows:\n+\n+> public�static�IContainerBuilder�AddDefaultODataServices(this�IContainerBuilder�builder)\n+>\n+> {\n+>\n+> //.........\n+>\n+> builder.AddService(ServiceLifetime.Singleton,�\n+>\n+> sp�=\\>�ODataUriResolver.GetUriResolver(null));\n+>\n+> //.........\n+>\n+> }\n+\n+###  WebAPI dependency injection of customized ODataUriResolver:\n+\n+-   WebAPI defines the DefaultContainerBuilder implementing the ODL's\n+    IContainerBuilder interface.\n+\n+-   When root container is created from HttpConfiguration (via the\n+    HttpConfigurationExtensions.CreateODataRootContainer), a\n+    PerRouteContainer instance will be used to:\n+\n+    -   Create an instance of DefaultContainerBuilder populated with\n+        default OData services noted in above;\n+\n+    -   Override the ODL's default ODataUriResolver service instance in\n+        the container builder with WebApi's new default for\n+        *UnqualifiedODataUriResover with EnableCaseInsensitive=true*.\n+\n+        > protected�IContainerBuilder�CreateContainerBuilderWithCoreServices()\n+        >\n+        > {\n+        > \n+        >     //......\n+        >\n+        > ����builder.AddDefaultODataServices();\n+        >\n+        > ����//�Set�Uri�resolver�to�by�default�enabling�unqualified�functions/actions�and�case�insensitive�match.\n+        >\n+        > ����builder.AddService(\n+        >\n+        > ��������ServiceLifetime.Singleton,\n+        >\n+        > ��������typeof(ODataUriResolver),\n+        >\n+        > ��������sp�=\\>�new�UnqualifiedODataUriResolver�{EnableCaseInsensitive�=�true});","path":"_posts/2018-06-18-12-02-WebApiV7_newDefaultSettings.md","position":null,"original_position":226,"commit_id":"0fa386ed70153a5817fd50751da879830be737e2","original_commit_id":"0fa386ed70153a5817fd50751da879830be737e2","user":{"login":"AlanWong-MS","id":22382722,"node_id":"MDQ6VXNlcjIyMzgyNzIy","avatar_url":"https://avatars1.githubusercontent.com/u/22382722?v=4","gravatar_id":"","url":"https://api.github.com/users/AlanWong-MS","html_url":"https://github.com/AlanWong-MS","followers_url":"https://api.github.com/users/AlanWong-MS/followers","following_url":"https://api.github.com/users/AlanWong-MS/following{/other_user}","gists_url":"https://api.github.com/users/AlanWong-MS/gists{/gist_id}","starred_url":"https://api.github.com/users/AlanWong-MS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AlanWong-MS/subscriptions","organizations_url":"https://api.github.com/users/AlanWong-MS/orgs","repos_url":"https://api.github.com/users/AlanWong-MS/repos","events_url":"https://api.github.com/users/AlanWong-MS/events{/privacy}","received_events_url":"https://api.github.com/users/AlanWong-MS/received_events","type":"User","site_admin":false},"body":"Same comment regarding =\\>","created_at":"2018-06-22T23:43:52Z","updated_at":"2018-06-22T23:43:53Z","html_url":"https://github.com/OData/WebApi/pull/1492#discussion_r197592279","pull_request_url":"https://api.github.com/repos/OData/WebApi/pulls/1492","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/OData/WebApi/pulls/comments/197592279"},"html":{"href":"https://github.com/OData/WebApi/pull/1492#discussion_r197592279"},"pull_request":{"href":"https://api.github.com/repos/OData/WebApi/pulls/1492"}}},"pull_request":{"url":"https://api.github.com/repos/OData/WebApi/pulls/1492","id":195974020,"node_id":"MDExOlB1bGxSZXF1ZXN0MTk1OTc0MDIw","html_url":"https://github.com/OData/WebApi/pull/1492","diff_url":"https://github.com/OData/WebApi/pull/1492.diff","patch_url":"https://github.com/OData/WebApi/pull/1492.patch","issue_url":"https://api.github.com/repos/OData/WebApi/issues/1492","number":1492,"state":"open","locked":false,"title":"Update design doc for WebApi v7 w.r.t. changed default settings","user":{"login":"biaol-odata","id":24885233,"node_id":"MDQ6VXNlcjI0ODg1MjMz","avatar_url":"https://avatars2.githubusercontent.com/u/24885233?v=4","gravatar_id":"","url":"https://api.github.com/users/biaol-odata","html_url":"https://github.com/biaol-odata","followers_url":"https://api.github.com/users/biaol-odata/followers","following_url":"https://api.github.com/users/biaol-odata/following{/other_user}","gists_url":"https://api.github.com/users/biaol-odata/gists{/gist_id}","starred_url":"https://api.github.com/users/biaol-odata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/biaol-odata/subscriptions","organizations_url":"https://api.github.com/users/biaol-odata/orgs","repos_url":"https://api.github.com/users/biaol-odata/repos","events_url":"https://api.github.com/users/biaol-odata/events{/privacy}","received_events_url":"https://api.github.com/users/biaol-odata/received_events","type":"User","site_admin":false},"body":"<!-- markdownlint-disable MD002 MD041 -->\r\n\r\n### Issues\r\n\r\n*This pull request fixes issue #1490. This is the md format file equivalent to the original docx format document we went thru in design meeting on May 2nd, 2018*\r\n\r\n### Description\r\n\r\n*Update design doc for WebApi v7 for updated default settings.*\r\n- Support for KeyAsSegment by default,\r\n- Support for Case-insensitive match for Url by default with best case-sensitive match.\r\n\r\n### Checklist (Uncheck if it is not completed)\r\n\r\n- [ ] *Test cases added*\r\n- [ ] *Build and test with one-click build and test script passed*\r\n\r\n### Additional work necessary\r\n\r\n*If documentation update is needed, please add \"Docs Needed\" label to the issue and provide details about the required document change in the issue.*\r\n","created_at":"2018-06-19T22:18:49Z","updated_at":"2018-06-22T23:43:53Z","closed_at":null,"merged_at":null,"merge_commit_sha":"54e82bcb632b736a3c5ca603a5453dfcc4798dcd","assignee":{"login":"biaol-odata","id":24885233,"node_id":"MDQ6VXNlcjI0ODg1MjMz","avatar_url":"https://avatars2.githubusercontent.com/u/24885233?v=4","gravatar_id":"","url":"https://api.github.com/users/biaol-odata","html_url":"https://github.com/biaol-odata","followers_url":"https://api.github.com/users/biaol-odata/followers","following_url":"https://api.github.com/users/biaol-odata/following{/other_user}","gists_url":"https://api.github.com/users/biaol-odata/gists{/gist_id}","starred_url":"https://api.github.com/users/biaol-odata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/biaol-odata/subscriptions","organizations_url":"https://api.github.com/users/biaol-odata/orgs","repos_url":"https://api.github.com/users/biaol-odata/repos","events_url":"https://api.github.com/users/biaol-odata/events{/privacy}","received_events_url":"https://api.github.com/users/biaol-odata/received_events","type":"User","site_admin":false},"assignees":[{"login":"biaol-odata","id":24885233,"node_id":"MDQ6VXNlcjI0ODg1MjMz","avatar_url":"https://avatars2.githubusercontent.com/u/24885233?v=4","gravatar_id":"","url":"https://api.github.com/users/biaol-odata","html_url":"https://github.com/biaol-odata","followers_url":"https://api.github.com/users/biaol-odata/followers","following_url":"https://api.github.com/users/biaol-odata/following{/other_user}","gists_url":"https://api.github.com/users/biaol-odata/gists{/gist_id}","starred_url":"https://api.github.com/users/biaol-odata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/biaol-odata/subscriptions","organizations_url":"https://api.github.com/users/biaol-odata/orgs","repos_url":"https://api.github.com/users/biaol-odata/repos","events_url":"https://api.github.com/users/biaol-odata/events{/privacy}","received_events_url":"https://api.github.com/users/biaol-odata/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"raheph","id":1559051,"node_id":"MDQ6VXNlcjE1NTkwNTE=","avatar_url":"https://avatars0.githubusercontent.com/u/1559051?v=4","gravatar_id":"","url":"https://api.github.com/users/raheph","html_url":"https://github.com/raheph","followers_url":"https://api.github.com/users/raheph/followers","following_url":"https://api.github.com/users/raheph/following{/other_user}","gists_url":"https://api.github.com/users/raheph/gists{/gist_id}","starred_url":"https://api.github.com/users/raheph/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/raheph/subscriptions","organizations_url":"https://api.github.com/users/raheph/orgs","repos_url":"https://api.github.com/users/raheph/repos","events_url":"https://api.github.com/users/raheph/events{/privacy}","received_events_url":"https://api.github.com/users/raheph/received_events","type":"User","site_admin":false},{"login":"xuzhg","id":9426627,"node_id":"MDQ6VXNlcjk0MjY2Mjc=","avatar_url":"https://avatars0.githubusercontent.com/u/9426627?v=4","gravatar_id":"","url":"https://api.github.com/users/xuzhg","html_url":"https://github.com/xuzhg","followers_url":"https://api.github.com/users/xuzhg/followers","following_url":"https://api.github.com/users/xuzhg/following{/other_user}","gists_url":"https://api.github.com/users/xuzhg/gists{/gist_id}","starred_url":"https://api.github.com/users/xuzhg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xuzhg/subscriptions","organizations_url":"https://api.github.com/users/xuzhg/orgs","repos_url":"https://api.github.com/users/xuzhg/repos","events_url":"https://api.github.com/users/xuzhg/events{/privacy}","received_events_url":"https://api.github.com/users/xuzhg/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/OData/WebApi/pulls/1492/commits","review_comments_url":"https://api.github.com/repos/OData/WebApi/pulls/1492/comments","review_comment_url":"https://api.github.com/repos/OData/WebApi/pulls/comments{/number}","comments_url":"https://api.github.com/repos/OData/WebApi/issues/1492/comments","statuses_url":"https://api.github.com/repos/OData/WebApi/statuses/0fa386ed70153a5817fd50751da879830be737e2","head":{"label":"biaol-odata:WebapiChangesDefaultsDesignDoc","ref":"WebapiChangesDefaultsDesignDoc","sha":"0fa386ed70153a5817fd50751da879830be737e2","user":{"login":"biaol-odata","id":24885233,"node_id":"MDQ6VXNlcjI0ODg1MjMz","avatar_url":"https://avatars2.githubusercontent.com/u/24885233?v=4","gravatar_id":"","url":"https://api.github.com/users/biaol-odata","html_url":"https://github.com/biaol-odata","followers_url":"https://api.github.com/users/biaol-odata/followers","following_url":"https://api.github.com/users/biaol-odata/following{/other_user}","gists_url":"https://api.github.com/users/biaol-odata/gists{/gist_id}","starred_url":"https://api.github.com/users/biaol-odata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/biaol-odata/subscriptions","organizations_url":"https://api.github.com/users/biaol-odata/orgs","repos_url":"https://api.github.com/users/biaol-odata/repos","events_url":"https://api.github.com/users/biaol-odata/events{/privacy}","received_events_url":"https://api.github.com/users/biaol-odata/received_events","type":"User","site_admin":false},"repo":{"id":78587796,"node_id":"MDEwOlJlcG9zaXRvcnk3ODU4Nzc5Ng==","name":"WebApi","full_name":"biaol-odata/WebApi","owner":{"login":"biaol-odata","id":24885233,"node_id":"MDQ6VXNlcjI0ODg1MjMz","avatar_url":"https://avatars2.githubusercontent.com/u/24885233?v=4","gravatar_id":"","url":"https://api.github.com/users/biaol-odata","html_url":"https://github.com/biaol-odata","followers_url":"https://api.github.com/users/biaol-odata/followers","following_url":"https://api.github.com/users/biaol-odata/following{/other_user}","gists_url":"https://api.github.com/users/biaol-odata/gists{/gist_id}","starred_url":"https://api.github.com/users/biaol-odata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/biaol-odata/subscriptions","organizations_url":"https://api.github.com/users/biaol-odata/orgs","repos_url":"https://api.github.com/users/biaol-odata/repos","events_url":"https://api.github.com/users/biaol-odata/events{/privacy}","received_events_url":"https://api.github.com/users/biaol-odata/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/biaol-odata/WebApi","description":"OData Web API: A server library built upon ODataLib and WebApi","fork":true,"url":"https://api.github.com/repos/biaol-odata/WebApi","forks_url":"https://api.github.com/repos/biaol-odata/WebApi/forks","keys_url":"https://api.github.com/repos/biaol-odata/WebApi/keys{/key_id}","collaborators_url":"https://api.github.com/repos/biaol-odata/WebApi/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/biaol-odata/WebApi/teams","hooks_url":"https://api.github.com/repos/biaol-odata/WebApi/hooks","issue_events_url":"https://api.github.com/repos/biaol-odata/WebApi/issues/events{/number}","events_url":"https://api.github.com/repos/biaol-odata/WebApi/events","assignees_url":"https://api.github.com/repos/biaol-odata/WebApi/assignees{/user}","branches_url":"https://api.github.com/repos/biaol-odata/WebApi/branches{/branch}","tags_url":"https://api.github.com/repos/biaol-odata/WebApi/tags","blobs_url":"https://api.github.com/repos/biaol-odata/WebApi/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/biaol-odata/WebApi/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/biaol-odata/WebApi/git/refs{/sha}","trees_url":"https://api.github.com/repos/biaol-odata/WebApi/git/trees{/sha}","statuses_url":"https://api.github.com/repos/biaol-odata/WebApi/statuses/{sha}","languages_url":"https://api.github.com/repos/biaol-odata/WebApi/languages","stargazers_url":"https://api.github.com/repos/biaol-odata/WebApi/stargazers","contributors_url":"https://api.github.com/repos/biaol-odata/WebApi/contributors","subscribers_url":"https://api.github.com/repos/biaol-odata/WebApi/subscribers","subscription_url":"https://api.github.com/repos/biaol-odata/WebApi/subscription","commits_url":"https://api.github.com/repos/biaol-odata/WebApi/commits{/sha}","git_commits_url":"https://api.github.com/repos/biaol-odata/WebApi/git/commits{/sha}","comments_url":"https://api.github.com/repos/biaol-odata/WebApi/comments{/number}","issue_comment_url":"https://api.github.com/repos/biaol-odata/WebApi/issues/comments{/number}","contents_url":"https://api.github.com/repos/biaol-odata/WebApi/contents/{+path}","compare_url":"https://api.github.com/repos/biaol-odata/WebApi/compare/{base}...{head}","merges_url":"https://api.github.com/repos/biaol-odata/WebApi/merges","archive_url":"https://api.github.com/repos/biaol-odata/WebApi/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/biaol-odata/WebApi/downloads","issues_url":"https://api.github.com/repos/biaol-odata/WebApi/issues{/number}","pulls_url":"https://api.github.com/repos/biaol-odata/WebApi/pulls{/number}","milestones_url":"https://api.github.com/repos/biaol-odata/WebApi/milestones{/number}","notifications_url":"https://api.github.com/repos/biaol-odata/WebApi/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/biaol-odata/WebApi/labels{/name}","releases_url":"https://api.github.com/repos/biaol-odata/WebApi/releases{/id}","deployments_url":"https://api.github.com/repos/biaol-odata/WebApi/deployments","created_at":"2017-01-11T00:37:06Z","updated_at":"2017-01-11T00:37:16Z","pushed_at":"2018-06-22T01:10:40Z","git_url":"git://github.com/biaol-odata/WebApi.git","ssh_url":"git@github.com:biaol-odata/WebApi.git","clone_url":"https://github.com/biaol-odata/WebApi.git","svn_url":"https://github.com/biaol-odata/WebApi","homepage":"http://odata.github.io/WebApi","size":21314,"stargazers_count":0,"watchers_count":0,"language":"C#","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"000"}},"base":{"label":"OData:gh-pages","ref":"gh-pages","sha":"92a52800d6db79a87ffcc7408e66d721a1843883","user":{"login":"OData","id":916520,"node_id":"MDEyOk9yZ2FuaXphdGlvbjkxNjUyMA==","avatar_url":"https://avatars1.githubusercontent.com/u/916520?v=4","gravatar_id":"","url":"https://api.github.com/users/OData","html_url":"https://github.com/OData","followers_url":"https://api.github.com/users/OData/followers","following_url":"https://api.github.com/users/OData/following{/other_user}","gists_url":"https://api.github.com/users/OData/gists{/gist_id}","starred_url":"https://api.github.com/users/OData/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OData/subscriptions","organizations_url":"https://api.github.com/users/OData/orgs","repos_url":"https://api.github.com/users/OData/repos","events_url":"https://api.github.com/users/OData/events{/privacy}","received_events_url":"https://api.github.com/users/OData/received_events","type":"Organization","site_admin":false},"repo":{"id":28804670,"node_id":"MDEwOlJlcG9zaXRvcnkyODgwNDY3MA==","name":"WebApi","full_name":"OData/WebApi","owner":{"login":"OData","id":916520,"node_id":"MDEyOk9yZ2FuaXphdGlvbjkxNjUyMA==","avatar_url":"https://avatars1.githubusercontent.com/u/916520?v=4","gravatar_id":"","url":"https://api.github.com/users/OData","html_url":"https://github.com/OData","followers_url":"https://api.github.com/users/OData/followers","following_url":"https://api.github.com/users/OData/following{/other_user}","gists_url":"https://api.github.com/users/OData/gists{/gist_id}","starred_url":"https://api.github.com/users/OData/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OData/subscriptions","organizations_url":"https://api.github.com/users/OData/orgs","repos_url":"https://api.github.com/users/OData/repos","events_url":"https://api.github.com/users/OData/events{/privacy}","received_events_url":"https://api.github.com/users/OData/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/OData/WebApi","description":"OData Web API: A server library built upon ODataLib and WebApi","fork":false,"url":"https://api.github.com/repos/OData/WebApi","forks_url":"https://api.github.com/repos/OData/WebApi/forks","keys_url":"https://api.github.com/repos/OData/WebApi/keys{/key_id}","collaborators_url":"https://api.github.com/repos/OData/WebApi/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/OData/WebApi/teams","hooks_url":"https://api.github.com/repos/OData/WebApi/hooks","issue_events_url":"https://api.github.com/repos/OData/WebApi/issues/events{/number}","events_url":"https://api.github.com/repos/OData/WebApi/events","assignees_url":"https://api.github.com/repos/OData/WebApi/assignees{/user}","branches_url":"https://api.github.com/repos/OData/WebApi/branches{/branch}","tags_url":"https://api.github.com/repos/OData/WebApi/tags","blobs_url":"https://api.github.com/repos/OData/WebApi/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/OData/WebApi/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/OData/WebApi/git/refs{/sha}","trees_url":"https://api.github.com/repos/OData/WebApi/git/trees{/sha}","statuses_url":"https://api.github.com/repos/OData/WebApi/statuses/{sha}","languages_url":"https://api.github.com/repos/OData/WebApi/languages","stargazers_url":"https://api.github.com/repos/OData/WebApi/stargazers","contributors_url":"https://api.github.com/repos/OData/WebApi/contributors","subscribers_url":"https://api.github.com/repos/OData/WebApi/subscribers","subscription_url":"https://api.github.com/repos/OData/WebApi/subscription","commits_url":"https://api.github.com/repos/OData/WebApi/commits{/sha}","git_commits_url":"https://api.github.com/repos/OData/WebApi/git/commits{/sha}","comments_url":"https://api.github.com/repos/OData/WebApi/comments{/number}","issue_comment_url":"https://api.github.com/repos/OData/WebApi/issues/comments{/number}","contents_url":"https://api.github.com/repos/OData/WebApi/contents/{+path}","compare_url":"https://api.github.com/repos/OData/WebApi/compare/{base}...{head}","merges_url":"https://api.github.com/repos/OData/WebApi/merges","archive_url":"https://api.github.com/repos/OData/WebApi/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/OData/WebApi/downloads","issues_url":"https://api.github.com/repos/OData/WebApi/issues{/number}","pulls_url":"https://api.github.com/repos/OData/WebApi/pulls{/number}","milestones_url":"https://api.github.com/repos/OData/WebApi/milestones{/number}","notifications_url":"https://api.github.com/repos/OData/WebApi/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/OData/WebApi/labels{/name}","releases_url":"https://api.github.com/repos/OData/WebApi/releases{/id}","deployments_url":"https://api.github.com/repos/OData/WebApi/deployments","created_at":"2015-01-05T08:50:51Z","updated_at":"2018-06-19T18:39:55Z","pushed_at":"2018-06-22T21:51:47Z","git_url":"git://github.com/OData/WebApi.git","ssh_url":"git@github.com:OData/WebApi.git","clone_url":"https://github.com/OData/WebApi.git","svn_url":"https://github.com/OData/WebApi","homepage":"http://odata.github.io/WebApi","size":22094,"stargazers_count":498,"watchers_count":498,"language":"C#","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":330,"mirror_url":null,"archived":false,"open_issues_count":285,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":330,"open_issues":285,"watchers":498,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/OData/WebApi/pulls/1492"},"html":{"href":"https://github.com/OData/WebApi/pull/1492"},"issue":{"href":"https://api.github.com/repos/OData/WebApi/issues/1492"},"comments":{"href":"https://api.github.com/repos/OData/WebApi/issues/1492/comments"},"review_comments":{"href":"https://api.github.com/repos/OData/WebApi/pulls/1492/comments"},"review_comment":{"href":"https://api.github.com/repos/OData/WebApi/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/OData/WebApi/pulls/1492/commits"},"statuses":{"href":"https://api.github.com/repos/OData/WebApi/statuses/0fa386ed70153a5817fd50751da879830be737e2"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"AlanWong-MS"}}