更改端口号后无法在Visual Studio中调试?

时间:2016-08-08 21:49:19

标签: asp.net-core asp.net-core-mvc .net-core

我添加了行.UseUrls("http://*:5000")以启用访问网络API的其他主机的客户端。

    public static void Main(string[] args)
    {
        var host = new WebHostBuilder()
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .UseUrls("http://*:5000") // Added
            .Build();

        host.Run();
    }

但是,使用浏览器访问localhost:5000/api/Test会出现HTTP/1.1 400 Bad Request的错误? .UseUrls()是否应仅为生产编译?

HTTP/1.1 400 Bad Request
Date: Mon, 08 Aug 2016 21:42:30 GMT
Content-Length: 0
Server: Kestrel

测试时,从Visual Studio输出窗口复制以下消息。

  

Microsoft.AspNetCore.Hosting.Internal.WebHost:信息:请求启动HTTP / 1.1 GET http://localhost:5000/api/Test

     

Microsoft.AspNetCore.Server.IISIntegration.IISMiddleware:错误:'MS-ASPNETCORE-TOKEN'与预期的配对令牌'9bca37f2-7eda-4517-9f8f-60b6cc05cf01'不匹配,请求被拒绝。

     

Microsoft.AspNetCore.Hosting.Internal.WebHost:信息:请求在8.5976ms完成400

2 个答案:

答案 0 :(得分:9)

您应首先拨打.UseUrls()和/或.UseConfig(),然后再拨打.UseIISIntegration()

在IIS / IISExpress下运行正常时,最终会有2个进程。 IIS在另一个端口上侦听所需的端口和Kestrel。您的请求应该转到IIS,然后转发给Kestrel(使用MS-ASPNETCORE-TOKEN)。

.UseIISIntegration()的调用隐藏了此映射。它实际上会更改您应用中的端口,并在所需端口上设置IIS。但如果你以不正确的顺序调用这两种方法,它就会中断。

您收到此错误消息是因为Kestrel预计会在IIS后面运行,并收到直接请求。它注意到因为IIS不能注入MS-ASPNETCORE-TOKEN标题。

issue会记录此问题,并可能在将来的版本中解决此问题。

答案 1 :(得分:0)

另一种解决方法。
由于错误是由于UseKestrel()UseIISIntegration()引起的,因此您可以尝试不使用IIS / IIS Express运行调试,而是选择Kestrel服务器,这样可以避免发生错误。
您可以检查Properties\launchSettings.json来找到另一个调试选项。