我开始将我的asp.net核心RC1项目转换为RC2,并面临现在IHttpContextAccessor无法解决的问题.
为简单起见,我使用Visual Studio模板创建了新的ASP.NET RC2项目ASP.NET Core Web Application (.Net Framework).比我添加了HomeController的构造函数,为我创建了哪个模板.
public HomeController(IHttpContextAccessor accessor)
{
}
Run Code Online (Sandbox Code Playgroud)
在我开始申请后,我收到下一个错误:
InvalidOperationException:尝试激活"TestNewCore.Controllers.HomeController"时,无法解析类型"Microsoft.AspNetCore.Http.IHttpContextAccessor"的服务.Microsoft.Extensions.Internal.ActivatorUtilities.GetService(IServiceProvider sp,Type type,Type requiredBy,Boolean isDefaultParameterRequired)
在我的实际应用中,我需要解决IHttpContextAccessor我自己的服务类获得访问_contextAccessor.HttpContext.Authentication和_contextAccessor.HttpContext.User.在RC1中,Everething运行良好.那么怎么能想到RC2呢?
我试图设置swagger来测试具有IFormFile属性的模型.例如,我有下一个api方法
[HttpPost]
public ApiResult<UserModel> SaveTestFileData([FromForm]TestPostFileArgs args)
{
var result = new UserModel() { Id = 1, Name = $"SaveTestFileData {args.UserId} company: {args.CompanyId}, file length: {args.CompanyFile.Length}" };
return ApiResult.Success(result);
}
Run Code Online (Sandbox Code Playgroud)
和我的参数模型
public class TestPostFileArgs
{
public int UserId { get; set; }
public int? CompanyId { get; set; }
public IFormFile CompanyFile { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
默认情况下,swagger生成帮助页面,不允许对其进行测试
为了解决这个问题,我写了下一个OperationFilter
public class FormFileOperationFilter: IOperationFilter
{
public void Apply(Operation operation, OperationFilterContext context)
{
if (operation.Parameters == null)
return;
var fileParamNames = context.ApiDescription.ActionDescriptor.Parameters
.SelectMany(x …Run Code Online (Sandbox Code Playgroud) 我正在尝试为我的 asp.net 核心应用程序添加 NLog。所以我完全按照这里的描述配置它https://github.com/NLog/NLog.Extensions.Logging。我还添加了https://github.com/NLog/NLog.Web和默认配置。到目前为止一切顺利,一切都按预期工作。
现在我想将我的日志文件存储在示例c:\temp\nlog-own-${shortdate}.log中指定的硬编码文件夹中,而不是存储在取决于当前项目的文件夹中。在我以前的 ASP.NET 项目中,我使用了类似这样的东西${basedir}\App_Data\Logs\nlog-own-${shortdate}.log。现在它也可以工作,但将文件放在 bin 目录中。但我想配置将这些文件放在IHostingEnvironment.ContentRootPath文件夹中。基本上我想要这样的东西
private static Logger Logger = LogManager.GetCurrentClassLogger();
private IHostingEnvironment _HostingEnvironment;
public UserController(IHostingEnvironment env)
{
_HostingEnvironment = env;
}
public IActionResult Index()
{
var fileTarget = Logger.Factory.Configuration.FindTargetByName<NLog.Targets.FileTarget>("ownFile-web");
fileTarget.FileName = new SimpleLayout(
@"${basedir}\App_Data\Logs\nlog-own-${shortdate}.log"
.Replace("${basedir}", _HostingEnvironment.ContentRootPath)
);
Logger.Info("Index page says hello");
return View(new UserListArgs());
}
Run Code Online (Sandbox Code Playgroud)
但以更优雅的方式。