use*_*899 3 web-hosting self-hosting asp.net-web-api
是否有支持自助和网络托管(同时)的最佳做法?
我必须解决许多问题.在自托管autofac下无法正常工作,因为未设置HttpContext.Current并且无法在自托管中访问GlobalConfiguration.
是否还有其他问题需要注意?
看看这个答案:https://stackoverflow.com/a/13285693/463785这将向您展示如何以托管层不可知的方式构建您的解决方案.
基本上,将您的ASP.NET Web API逻辑放入一个单独的项目中,并且正如@DarrelMiller建议的那样,不要在该项目中使用任何托管特定的上下文.甚至不要System.Web在此项目中引用不必要的程序集(例如:).但是,您将具有一些托管层特定需求,例如获取使用者的IP地址(这不能通过ASP.NET Web API为您提供).在这种情况下,请在核心API和托管层之间使用某种合同.
例如,下面一个是消息处理程序,它将为每个请求设置使用者的IP地址,并通过我的WebHost项目注册了此消息处理程序:
public class UserHostAddressSetterHandler : DelegatingHandler {
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) {
request.Properties[ApiCommonRequestKeys.UserHostAddressKey] = request.GetUserHostAddress();
return base.SendAsync(request, cancellationToken);
}
}
internal static class HttpRequestMessageExtensions {
internal static HttpContextBase GetHttpContext(this HttpRequestMessage request) {
return (HttpContextBase)request.Properties[Constants.MS_HttpContextKey];
}
internal static string GetUserHostAddress(this HttpRequestMessage request) {
return request.GetHttpContext().Request.UserHostAddress;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,在API核心层,我知道,托管层已设置IP地址,我可以通过它达到Properties[ApiCommonRequestKeys.UserHostAddressKey]的HttpRequestMessage情况下随时随地.
看看这个项目:https://github.com/tugberkugurlu/PingYourPackage这是一个很好的ASP.NET Web API项目,它以托管后来的不可知方式构建.可能会给你一个提示.
| 归档时间: |
|
| 查看次数: |
3579 次 |
| 最近记录: |