From 903197e1cee402be92aeb73f06ccf44d0852b796 Mon Sep 17 00:00:00 2001 From: Chris Ross Date: Mon, 5 May 2014 17:14:45 -0700 Subject: [PATCH] Fix HttpAbstraction dependencies. --- samples/SelfHostServer/project.json | 2 +- .../FeatureContext.cs | 64 +++++++++---------- .../project.json | 2 +- src/Microsoft.AspNet.WebSockets/project.json | 2 +- .../HttpsTests.cs | 4 +- .../RequestTests.cs | 10 +-- .../ResponseHeaderTests.cs | 14 ++-- .../ResponseSendFileTests.cs | 26 ++++---- .../ResponseTests.cs | 2 +- .../project.json | 2 +- 10 files changed, 64 insertions(+), 64 deletions(-) diff --git a/samples/SelfHostServer/project.json b/samples/SelfHostServer/project.json index 3bf4abed6e..9502a45614 100644 --- a/samples/SelfHostServer/project.json +++ b/samples/SelfHostServer/project.json @@ -1,7 +1,7 @@ { "version" : "0.1-alpha-*", "dependencies": { - "Microsoft.AspNet.Abstractions": "0.1-alpha-*", + "Microsoft.AspNet.Http": "0.1-alpha-*", "Microsoft.AspNet.Hosting": "0.1-alpha-*", "Microsoft.Net.Server": "", "Microsoft.AspNet.Server.WebListener": "" diff --git a/src/Microsoft.AspNet.Server.WebListener/FeatureContext.cs b/src/Microsoft.AspNet.Server.WebListener/FeatureContext.cs index efd6fa14f0..e217b38495 100644 --- a/src/Microsoft.AspNet.Server.WebListener/FeatureContext.cs +++ b/src/Microsoft.AspNet.Server.WebListener/FeatureContext.cs @@ -28,7 +28,7 @@ using Microsoft.Net.Server; namespace Microsoft.AspNet.Server.WebListener { - internal class FeatureContext : IHttpRequestInformation, IHttpConnection, IHttpResponseInformation, IHttpSendFile, IHttpTransportLayerSecurity, IHttpRequestLifetime + internal class FeatureContext : IHttpRequestFeature, IHttpConnectionFeature, IHttpResponseFeature, IHttpSendFileFeature, IHttpTransportLayerSecurityFeature, IHttpRequestLifetimeFeature { private RequestContext _requestContext; private FeatureCollection _features; @@ -74,16 +74,16 @@ namespace Microsoft.AspNet.Server.WebListener private void PopulateFeatures() { - _features.Add(typeof(IHttpRequestInformation), this); - _features.Add(typeof(IHttpConnection), this); + _features.Add(typeof(IHttpRequestFeature), this); + _features.Add(typeof(IHttpConnectionFeature), this); if (Request.IsSecureConnection) { // TODO: Should this feature be conditional? Should we add this for HTTP requests? - _features.Add(typeof(IHttpTransportLayerSecurity), this); + _features.Add(typeof(IHttpTransportLayerSecurityFeature), this); } - _features.Add(typeof(IHttpResponseInformation), this); - _features.Add(typeof(IHttpSendFile), this); - _features.Add(typeof(IHttpRequestLifetime), this); + _features.Add(typeof(IHttpResponseFeature), this); + _features.Add(typeof(IHttpSendFileFeature), this); + _features.Add(typeof(IHttpRequestLifetimeFeature), this); // TODO: // _environment.CallCancelled = _cts.Token; @@ -98,9 +98,9 @@ namespace Microsoft.AspNet.Server.WebListener */ } - #region IHttpRequestInformation + #region IHttpRequestFeature - Stream IHttpRequestInformation.Body + Stream IHttpRequestFeature.Body { get { @@ -113,7 +113,7 @@ namespace Microsoft.AspNet.Server.WebListener set { _requestBody = value; } } - IDictionary IHttpRequestInformation.Headers + IDictionary IHttpRequestFeature.Headers { get { @@ -126,7 +126,7 @@ namespace Microsoft.AspNet.Server.WebListener set { _requestHeaders = value; } } - string IHttpRequestInformation.Method + string IHttpRequestFeature.Method { get { @@ -139,7 +139,7 @@ namespace Microsoft.AspNet.Server.WebListener set { _httpMethod = value; } } - string IHttpRequestInformation.Path + string IHttpRequestFeature.Path { get { @@ -152,7 +152,7 @@ namespace Microsoft.AspNet.Server.WebListener set { _path = value; } } - string IHttpRequestInformation.PathBase + string IHttpRequestFeature.PathBase { get { @@ -165,7 +165,7 @@ namespace Microsoft.AspNet.Server.WebListener set { _pathBase = value; } } - string IHttpRequestInformation.Protocol + string IHttpRequestFeature.Protocol { get { @@ -190,7 +190,7 @@ namespace Microsoft.AspNet.Server.WebListener set { _httpProtocolVersion = value; } } - string IHttpRequestInformation.QueryString + string IHttpRequestFeature.QueryString { get { @@ -203,7 +203,7 @@ namespace Microsoft.AspNet.Server.WebListener set { _query = value; } } - string IHttpRequestInformation.Scheme + string IHttpRequestFeature.Scheme { get { @@ -216,8 +216,8 @@ namespace Microsoft.AspNet.Server.WebListener set { _scheme = value; } } #endregion - #region IHttpConnection - bool IHttpConnection.IsLocal + #region IHttpConnectionFeature + bool IHttpConnectionFeature.IsLocal { get { @@ -230,7 +230,7 @@ namespace Microsoft.AspNet.Server.WebListener set { _isLocal = value; } } - IPAddress IHttpConnection.LocalIpAddress + IPAddress IHttpConnectionFeature.LocalIpAddress { get { @@ -243,7 +243,7 @@ namespace Microsoft.AspNet.Server.WebListener set { _localIpAddress = value; } } - IPAddress IHttpConnection.RemoteIpAddress + IPAddress IHttpConnectionFeature.RemoteIpAddress { get { @@ -256,7 +256,7 @@ namespace Microsoft.AspNet.Server.WebListener set { _remoteIpAddress = value; } } - int IHttpConnection.LocalPort + int IHttpConnectionFeature.LocalPort { get { @@ -269,7 +269,7 @@ namespace Microsoft.AspNet.Server.WebListener set { _localPort = value; } } - int IHttpConnection.RemotePort + int IHttpConnectionFeature.RemotePort { get { @@ -282,8 +282,8 @@ namespace Microsoft.AspNet.Server.WebListener set { _remotePort = value; } } #endregion - #region IHttpTransportLayerSecurity - X509Certificate IHttpTransportLayerSecurity.ClientCertificate + #region IHttpTransportLayerSecurityFeature + X509Certificate IHttpTransportLayerSecurityFeature.ClientCertificate { get { @@ -296,7 +296,7 @@ namespace Microsoft.AspNet.Server.WebListener set { _clientCert = value; } } - async Task IHttpTransportLayerSecurity.LoadAsync() + async Task IHttpTransportLayerSecurityFeature.LoadAsync() { if (_clientCert == null) { @@ -304,8 +304,8 @@ namespace Microsoft.AspNet.Server.WebListener } } #endregion - #region IHttpResponseInformation - Stream IHttpResponseInformation.Body + #region IHttpResponseFeature + Stream IHttpResponseFeature.Body { get { @@ -318,7 +318,7 @@ namespace Microsoft.AspNet.Server.WebListener set { _responseStream = value; } } - IDictionary IHttpResponseInformation.Headers + IDictionary IHttpResponseFeature.Headers { get { @@ -331,24 +331,24 @@ namespace Microsoft.AspNet.Server.WebListener set { _responseHeaders = value; } } - void IHttpResponseInformation.OnSendingHeaders(Action callback, object state) + void IHttpResponseFeature.OnSendingHeaders(Action callback, object state) { Response.OnSendingHeaders(callback, state); } - string IHttpResponseInformation.ReasonPhrase + string IHttpResponseFeature.ReasonPhrase { get { return Response.ReasonPhrase; } set { Response.ReasonPhrase = value; } } - int IHttpResponseInformation.StatusCode + int IHttpResponseFeature.StatusCode { get { return Response.StatusCode; } set { Response.StatusCode = value; } } #endregion - Task IHttpSendFile.SendFileAsync(string path, long offset, long? length, CancellationToken cancellation) + Task IHttpSendFileFeature.SendFileAsync(string path, long offset, long? length, CancellationToken cancellation) { return Response.SendFileAsync(path, offset, length, cancellation); } diff --git a/src/Microsoft.AspNet.Server.WebListener/project.json b/src/Microsoft.AspNet.Server.WebListener/project.json index ebd2c31782..2e0aa4f30b 100644 --- a/src/Microsoft.AspNet.Server.WebListener/project.json +++ b/src/Microsoft.AspNet.Server.WebListener/project.json @@ -2,7 +2,7 @@ "version": "0.1-alpha-*", "dependencies": { "Microsoft.Net.Server" : "", - "Microsoft.AspNet.Abstractions": "0.1-alpha-*", + "Microsoft.AspNet.Http": "0.1-alpha-*", "Microsoft.AspNet.ConfigurationModel": "0.1-alpha-*", "Microsoft.AspNet.HttpFeature": "0.1-alpha-*", "Microsoft.AspNet.FeatureModel": "0.1-alpha-*", diff --git a/src/Microsoft.AspNet.WebSockets/project.json b/src/Microsoft.AspNet.WebSockets/project.json index f7abac917f..fa2484fec2 100644 --- a/src/Microsoft.AspNet.WebSockets/project.json +++ b/src/Microsoft.AspNet.WebSockets/project.json @@ -1,7 +1,7 @@ { "version": "0.1-alpha-*", "dependencies": { - "Microsoft.AspNet.Abstractions" : "0.1-alpha-*", + "Microsoft.AspNet.Http" : "0.1-alpha-*", "Microsoft.AspNet.HttpFeature" : "0.1-alpha-*" }, "compilationOptions" : { "allowUnsafe": true }, diff --git a/test/Microsoft.AspNet.Server.WebListener.FunctionalTests/HttpsTests.cs b/test/Microsoft.AspNet.Server.WebListener.FunctionalTests/HttpsTests.cs index e9fd2f1aa2..1257d82d7b 100644 --- a/test/Microsoft.AspNet.Server.WebListener.FunctionalTests/HttpsTests.cs +++ b/test/Microsoft.AspNet.Server.WebListener.FunctionalTests/HttpsTests.cs @@ -85,7 +85,7 @@ namespace Microsoft.AspNet.Server.WebListener using (Utilities.CreateHttpsServer(async env => { var httpContext = new DefaultHttpContext((IFeatureCollection)env); - var tls = httpContext.GetFeature(); + var tls = httpContext.GetFeature(); Assert.NotNull(tls); await tls.LoadAsync(); Assert.Null(tls.ClientCertificate); @@ -102,7 +102,7 @@ namespace Microsoft.AspNet.Server.WebListener using (Utilities.CreateHttpsServer(async env => { var httpContext = new DefaultHttpContext((IFeatureCollection)env); - var tls = httpContext.GetFeature(); + var tls = httpContext.GetFeature(); Assert.NotNull(tls); await tls.LoadAsync(); Assert.NotNull(tls.ClientCertificate); diff --git a/test/Microsoft.AspNet.Server.WebListener.FunctionalTests/RequestTests.cs b/test/Microsoft.AspNet.Server.WebListener.FunctionalTests/RequestTests.cs index 93a0f4f041..57bb19b423 100644 --- a/test/Microsoft.AspNet.Server.WebListener.FunctionalTests/RequestTests.cs +++ b/test/Microsoft.AspNet.Server.WebListener.FunctionalTests/RequestTests.cs @@ -45,7 +45,7 @@ namespace Microsoft.AspNet.Server.WebListener // General keys // TODO: Assert.True(env.Get("owin.CallCancelled").CanBeCanceled); - var requestInfo = httpContext.GetFeature(); + var requestInfo = httpContext.GetFeature(); // Request Keys Assert.Equal("GET", requestInfo.Method); @@ -60,7 +60,7 @@ namespace Microsoft.AspNet.Server.WebListener // Server Keys // TODO: Assert.NotNull(env.Get>("server.Capabilities")); - var connectionInfo = httpContext.GetFeature(); + var connectionInfo = httpContext.GetFeature(); Assert.Equal("::1", connectionInfo.RemoteIpAddress.ToString()); Assert.NotEqual(0, connectionInfo.RemotePort); Assert.Equal("::1", connectionInfo.LocalIpAddress.ToString()); @@ -96,8 +96,8 @@ namespace Microsoft.AspNet.Server.WebListener var httpContext = new DefaultHttpContext((IFeatureCollection)env); try { - var requestInfo = httpContext.GetFeature(); - var connectionInfo = httpContext.GetFeature(); + var requestInfo = httpContext.GetFeature(); + var connectionInfo = httpContext.GetFeature(); // Request Keys Assert.Equal("http", requestInfo.Scheme); @@ -137,7 +137,7 @@ namespace Microsoft.AspNet.Server.WebListener using (CreateServer(env => { var httpContext = new DefaultHttpContext((IFeatureCollection)env); - var requestInfo = httpContext.GetFeature(); + var requestInfo = httpContext.GetFeature(); try { Assert.Equal(expectedPath, requestInfo.Path); diff --git a/test/Microsoft.AspNet.Server.WebListener.FunctionalTests/ResponseHeaderTests.cs b/test/Microsoft.AspNet.Server.WebListener.FunctionalTests/ResponseHeaderTests.cs index d6f5441ce6..726455a650 100644 --- a/test/Microsoft.AspNet.Server.WebListener.FunctionalTests/ResponseHeaderTests.cs +++ b/test/Microsoft.AspNet.Server.WebListener.FunctionalTests/ResponseHeaderTests.cs @@ -56,7 +56,7 @@ namespace Microsoft.AspNet.Server.WebListener using (Utilities.CreateHttpServer(env => { var httpContext = new DefaultHttpContext((IFeatureCollection)env); - var responseInfo = httpContext.GetFeature(); + var responseInfo = httpContext.GetFeature(); var responseHeaders = responseInfo.Headers; responseHeaders["WWW-Authenticate"] = new string[] { "custom1" }; return Task.FromResult(0); @@ -80,7 +80,7 @@ namespace Microsoft.AspNet.Server.WebListener using (Utilities.CreateHttpServer(env => { var httpContext = new DefaultHttpContext((IFeatureCollection)env); - var responseInfo = httpContext.GetFeature(); + var responseInfo = httpContext.GetFeature(); var responseHeaders = responseInfo.Headers; responseHeaders["WWW-Authenticate"] = new string[] { "custom1, and custom2", "custom3" }; return Task.FromResult(0); @@ -104,7 +104,7 @@ namespace Microsoft.AspNet.Server.WebListener using (Utilities.CreateHttpServer(env => { var httpContext = new DefaultHttpContext((IFeatureCollection)env); - var responseInfo = httpContext.GetFeature(); + var responseInfo = httpContext.GetFeature(); var responseHeaders = responseInfo.Headers; responseHeaders["Custom-Header1"] = new string[] { "custom1, and custom2", "custom3" }; return Task.FromResult(0); @@ -128,7 +128,7 @@ namespace Microsoft.AspNet.Server.WebListener using (Utilities.CreateHttpServer(env => { var httpContext = new DefaultHttpContext((IFeatureCollection)env); - var responseInfo = httpContext.GetFeature(); + var responseInfo = httpContext.GetFeature(); var responseHeaders = responseInfo.Headers; responseHeaders["Connection"] = new string[] { "Close" }; return Task.FromResult(0); @@ -205,7 +205,7 @@ namespace Microsoft.AspNet.Server.WebListener using (Utilities.CreateHttpServer(env => { var httpContext = new DefaultHttpContext((IFeatureCollection)env); - var responseInfo = httpContext.GetFeature(); + var responseInfo = httpContext.GetFeature(); var responseHeaders = responseInfo.Headers; responseHeaders["Transfer-Encoding"] = new string[] { "chunked" }; return responseInfo.Body.WriteAsync(new byte[10], 0, 10); @@ -233,7 +233,7 @@ namespace Microsoft.AspNet.Server.WebListener env => { var httpContext = new DefaultHttpContext((IFeatureCollection)env); - var responseInfo = httpContext.GetFeature(); + var responseInfo = httpContext.GetFeature(); var responseHeaders = responseInfo.Headers; responseHeaders.Add("Custom1", new string[] { "value1a", "value1b" }); responseHeaders.Add("Custom2", new string[] { "value2a, value2b" }); @@ -263,7 +263,7 @@ namespace Microsoft.AspNet.Server.WebListener async env => { var httpContext = new DefaultHttpContext((IFeatureCollection)env); - var responseInfo = httpContext.GetFeature(); + var responseInfo = httpContext.GetFeature(); var responseHeaders = responseInfo.Headers; responseHeaders.Add("Custom1", new string[] { "value1a", "value1b" }); responseHeaders.Add("Custom2", new string[] { "value2a, value2b" }); diff --git a/test/Microsoft.AspNet.Server.WebListener.FunctionalTests/ResponseSendFileTests.cs b/test/Microsoft.AspNet.Server.WebListener.FunctionalTests/ResponseSendFileTests.cs index 7e668593c2..eda1f7c2de 100644 --- a/test/Microsoft.AspNet.Server.WebListener.FunctionalTests/ResponseSendFileTests.cs +++ b/test/Microsoft.AspNet.Server.WebListener.FunctionalTests/ResponseSendFileTests.cs @@ -65,7 +65,7 @@ namespace Microsoft.AspNet.Server.WebListener Assert.Equal("Overlapped", support.Get("sendfile.Concurrency")); */ - var sendFile = httpContext.GetFeature(); + var sendFile = httpContext.GetFeature(); Assert.NotNull(sendFile); } catch (Exception ex) @@ -94,7 +94,7 @@ namespace Microsoft.AspNet.Server.WebListener using (Utilities.CreateHttpServer(env => { var httpContext = new DefaultHttpContext((IFeatureCollection)env); - var sendFile = httpContext.GetFeature(); + var sendFile = httpContext.GetFeature(); try { sendFile.SendFileAsync(string.Empty, 0, null, CancellationToken.None).Wait(); @@ -126,7 +126,7 @@ namespace Microsoft.AspNet.Server.WebListener using (Utilities.CreateHttpServer(env => { var httpContext = new DefaultHttpContext((IFeatureCollection)env); - var sendFile = httpContext.GetFeature(); + var sendFile = httpContext.GetFeature(); return sendFile.SendFileAsync(AbsoluteFilePath, 0, null, CancellationToken.None); })) { @@ -145,7 +145,7 @@ namespace Microsoft.AspNet.Server.WebListener using (Utilities.CreateHttpServer(env => { var httpContext = new DefaultHttpContext((IFeatureCollection)env); - var sendFile = httpContext.GetFeature(); + var sendFile = httpContext.GetFeature(); return sendFile.SendFileAsync(RelativeFilePath, 0, null, CancellationToken.None); })) { @@ -164,7 +164,7 @@ namespace Microsoft.AspNet.Server.WebListener using (Utilities.CreateHttpServer(env => { var httpContext = new DefaultHttpContext((IFeatureCollection)env); - var sendFile = httpContext.GetFeature(); + var sendFile = httpContext.GetFeature(); httpContext.Response.Headers["Transfer-EncodinG"] = "CHUNKED"; return sendFile.SendFileAsync(AbsoluteFilePath, 0, null, CancellationToken.None); })) @@ -184,7 +184,7 @@ namespace Microsoft.AspNet.Server.WebListener using (Utilities.CreateHttpServer(env => { var httpContext = new DefaultHttpContext((IFeatureCollection)env); - var sendFile = httpContext.GetFeature(); + var sendFile = httpContext.GetFeature(); httpContext.Response.Headers["Transfer-EncodinG"] = "CHUNKED"; sendFile.SendFileAsync(AbsoluteFilePath, 0, null, CancellationToken.None).Wait(); return sendFile.SendFileAsync(AbsoluteFilePath, 0, null, CancellationToken.None); @@ -205,7 +205,7 @@ namespace Microsoft.AspNet.Server.WebListener using (Utilities.CreateHttpServer(env => { var httpContext = new DefaultHttpContext((IFeatureCollection)env); - var sendFile = httpContext.GetFeature(); + var sendFile = httpContext.GetFeature(); return sendFile.SendFileAsync(AbsoluteFilePath, 0, FileLength / 2, CancellationToken.None); })) { @@ -224,7 +224,7 @@ namespace Microsoft.AspNet.Server.WebListener using (Utilities.CreateHttpServer(env => { var httpContext = new DefaultHttpContext((IFeatureCollection)env); - var sendFile = httpContext.GetFeature(); + var sendFile = httpContext.GetFeature(); return sendFile.SendFileAsync(AbsoluteFilePath, 1234567, null, CancellationToken.None); })) { @@ -239,7 +239,7 @@ namespace Microsoft.AspNet.Server.WebListener using (Utilities.CreateHttpServer(env => { var httpContext = new DefaultHttpContext((IFeatureCollection)env); - var sendFile = httpContext.GetFeature(); + var sendFile = httpContext.GetFeature(); return sendFile.SendFileAsync(AbsoluteFilePath, 0, 1234567, CancellationToken.None); })) { @@ -254,7 +254,7 @@ namespace Microsoft.AspNet.Server.WebListener using (Utilities.CreateHttpServer(env => { var httpContext = new DefaultHttpContext((IFeatureCollection)env); - var sendFile = httpContext.GetFeature(); + var sendFile = httpContext.GetFeature(); return sendFile.SendFileAsync(AbsoluteFilePath, 0, 0, CancellationToken.None); })) { @@ -273,7 +273,7 @@ namespace Microsoft.AspNet.Server.WebListener using (Utilities.CreateHttpServer(env => { var httpContext = new DefaultHttpContext((IFeatureCollection)env); - var sendFile = httpContext.GetFeature(); + var sendFile = httpContext.GetFeature(); httpContext.Response.Headers["Content-lenGth"] = FileLength.ToString(); return sendFile.SendFileAsync(AbsoluteFilePath, 0, null, CancellationToken.None); })) @@ -294,7 +294,7 @@ namespace Microsoft.AspNet.Server.WebListener using (Utilities.CreateHttpServer(env => { var httpContext = new DefaultHttpContext((IFeatureCollection)env); - var sendFile = httpContext.GetFeature(); + var sendFile = httpContext.GetFeature(); httpContext.Response.Headers["Content-lenGth"] = "10"; return sendFile.SendFileAsync(AbsoluteFilePath, 0, 10, CancellationToken.None); })) @@ -315,7 +315,7 @@ namespace Microsoft.AspNet.Server.WebListener using (Utilities.CreateHttpServer(env => { var httpContext = new DefaultHttpContext((IFeatureCollection)env); - var sendFile = httpContext.GetFeature(); + var sendFile = httpContext.GetFeature(); httpContext.Response.Headers["Content-lenGth"] = "0"; return sendFile.SendFileAsync(AbsoluteFilePath, 0, 0, CancellationToken.None); })) diff --git a/test/Microsoft.AspNet.Server.WebListener.FunctionalTests/ResponseTests.cs b/test/Microsoft.AspNet.Server.WebListener.FunctionalTests/ResponseTests.cs index befdfbb97d..7e411dba05 100644 --- a/test/Microsoft.AspNet.Server.WebListener.FunctionalTests/ResponseTests.cs +++ b/test/Microsoft.AspNet.Server.WebListener.FunctionalTests/ResponseTests.cs @@ -74,7 +74,7 @@ namespace Microsoft.AspNet.Server.WebListener { var httpContext = new DefaultHttpContext((IFeatureCollection)env); httpContext.Response.StatusCode = 201; - httpContext.GetFeature().ReasonPhrase = "CustomReasonPhrase"; // TODO? + httpContext.GetFeature().ReasonPhrase = "CustomReasonPhrase"; // TODO? // TODO: env["owin.ResponseProtocol"] = "HTTP/1.0"; // Http.Sys ignores this value return Task.FromResult(0); })) diff --git a/test/Microsoft.AspNet.Server.WebListener.FunctionalTests/project.json b/test/Microsoft.AspNet.Server.WebListener.FunctionalTests/project.json index 4f6ab2edbd..6ff4fe92b9 100644 --- a/test/Microsoft.AspNet.Server.WebListener.FunctionalTests/project.json +++ b/test/Microsoft.AspNet.Server.WebListener.FunctionalTests/project.json @@ -11,7 +11,7 @@ "xunit.execution": "2.0.0-aspnet-*", "Microsoft.AspNet.Server.WebListener" : "", "Microsoft.Net.Server" : "", - "Microsoft.AspNet.Abstractions" : "0.1-alpha-*", + "Microsoft.AspNet.Http" : "0.1-alpha-*", "Microsoft.AspNet.ConfigurationModel": "0.1-alpha-*", "Microsoft.AspNet.HttpFeature" : "0.1-alpha-*", "Microsoft.AspNet.FeatureModel" : "0.1-alpha-*",