gpt4 book ai didi

c# - WebApi 在调试时给出 404;发布时有效

转载 作者:太空狗 更新时间:2023-10-30 01:28:48 24 4
gpt4 key购买 nike

我有一个用 .NET Core 2.2.6 编写的控制台应用程序,它使用 Kestrel 来托管一个简单的 WebApi。

public class SettingsController : Controller
{
//
// GET: /settings/

public string Index()
{
return $"Hello world! controller";
}
}

如果我发布代码并运行可执行文件,我可以访问 http://127.0.0.1:310/settings并看到预期的“Hello world!controller”。但是,如果我从 Visual Studio 2019 内部调试(甚至在 Release模式下打开),相同的 URL 会引发 404 异常。

Publish profile

一些可能有助于查明问题的其他代码:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureKestrel((context, options) =>
{
options.ListenAnyIP(310, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http1;
});
})
.UseStartup<Startup>();

public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseDefaultFiles(new DefaultFilesOptions()
{
DefaultFileNames = new List<string>() { "index.html" }
});

// Return static files and end the pipeline.
app.UseStaticFiles(new StaticFileOptions
{
OnPrepareResponse = ctx =>
{
const int durationInSeconds = 60 * 60 * 24;
ctx.Context.Response.Headers[HeaderNames.CacheControl] =
"public,max-age=" + durationInSeconds;
}
});

// Use Cookie Policy Middleware to conform to EU General Data
// Protection Regulation (GDPR) regulations.
app.UseCookiePolicy();

// Add MVC to the request pipeline.
app.UseMvcWithDefaultRoute();
}
}

最佳答案

有一个非常相关的 GitHub issue这解释了这里发生的事情。来自 ASP.NET Core 团队的 Pranav K 说:

MVC 2.1.0 requires compilation context to be available. Compilation context tells it if a library references MVC which is used as a filter to skip assemblies that are deemed unlikely to have controllers. Microsoft.NET.Sdk does not set <PreserveCompilationContext>true</PreserveCompilationContext> which would explain why you're seeing this.

这意味着您所遇到的问题有几个可行的解决方案:

  1. 添加 PreserveCompilationContext属性到您的 .csproj 文件,值为 true ,如上所示。
  2. 引用 Microsoft.NET.Sdk.Web项目 SDK 而不是 Microsoft.NET.Sdk .

我不知道这两个选项之间有什么明显的区别,但我会更新项目 SDK,因为它实际上是您正在构建的 Web 项目。

关于c# - WebApi 在调试时给出 404;发布时有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57251464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com