小编Yur*_*iyP的帖子

InvalidOperationException:无法解析类型为"Microsoft.AspNetCore.Http.IHttpContextAccessor"的服务

我开始将我的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呢?

.net dependency-injection asp.net-core

114
推荐指数
5
解决办法
5万
查看次数

用于IFormFile的Asp.Net Core swagger帮助页面

我试图设置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生成帮助页面,不允许对其进行测试 错误的招摇ui 为了解决这个问题,我写了下一个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-web-api swagger asp.net-core

6
推荐指数
2
解决办法
4911
查看次数

如何配置 nlog 以在 FileTarget 中使用 IHostingEnvironment.ContentRootPath

我正在尝试为我的 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)

但以更优雅的方式。

nlog asp.net-core

2
推荐指数
1
解决办法
2204
查看次数