有两种方法
1) 如果您的库仅使用网络应用程序,您可以通过 nuget 添加到库中
Microsoft.AspNetCore.Mvc.Abstractions 过滤器
用于 HttpContext 的 Microsoft.AspNetCore.Http.Abstractions
并在您的库中使用 HttpContext 创建共享过滤器和其他操作
2) 使用 DI。创建一些接口并在库中使用它并在项目中创建它的实现类。之后使用 DI 注入你的类,这个接口将被调用。
- 您可以在 Desktop\Web 或任何应用程序中使用它 +
- 不需要库 +
- 您不依赖任何版本的 API +
- 过滤器不起作用 -
- 您需要在每个项目中实现您的接口 -
示例从 .Net 标准库中的服务中的 HttpContext 获取 cookie
public interface ICookieAccessor
{
string GetCookieValueByName(string name);
}
public class SomeServiceThatUsesCookie()
{
private readonly ICookieAccessor _cookieAccessor;
public SomeServiceThatUsesCookie(ICookieAccessor cookieAccessor){
_cookieAccessor = cookieAccessor;
}
public string IWonnaCookie(string name){
return _cookieAccessor.GetCookieValueByName(name);
}
}
并在 Web 项目中实现接口(每个项目中都应该实现)
public class CookieAccessor: ICookieAccessor
{
private readonly IHttpContextAccessor _httpContext;
public class CookieAccessor(IHttpContextAccessor httpContext){
_httpContext = httpContext;
}
public string GetCookieValueByName(string name){
if (_httpContext.HttpContext.Request.Cookies.TryGetValue(name,
out var value))
{
return value;
}
return null;
}
}
并将其注入到您的 WebApps 启动文件 ConfigureServices 方法中
services.AddTransient<ICookieAccessor, CookieAccessor>();
services.AddTransient<SomeServiceThatUsesCookie>();
比在某些控制器中使用您的服务
public class SomeContoller: Controller
{
private readonly SomeServiceThatUsesCookie _someService;
public SomeContoller(SomeServiceThatUsesCookie someService){
_someService = someService;
}
public string GetCookieValue(string name){
return _someService.IWonnaCookie(name);
}
}