[英]WebApi giving 404 whilst debugging; works when published
我有一個用 .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!控制器”。 但是,如果我從 Visual Studio 2019 內部調試(甚至在發布模式下打開),相同的 URL 會引發 404 異常。
其他一些可能有助於查明問題的代碼:
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 問題可以解釋這里發生的事情。 來自 ASP.NET Core 團隊的 Pranav K 說:
MVC 2.1.0 要求編譯上下文可用。 編譯上下文告訴它一個庫是否引用了 MVC,MVC 被用作過濾器來跳過被認為不太可能有控制器的程序集。 Microsoft.NET.Sdk 沒有設置
<PreserveCompilationContext>true</PreserveCompilationContext>
這可以解釋為什么你會看到這個。
這意味着您看到的問題有幾個可行的解決方案:
PreserveCompilationContext
屬性添加到您的 .csproj 文件,值為true
,如上所示。Microsoft.NET.Sdk.Web
項目 SDK 而不是Microsoft.NET.Sdk
。我不知道這兩個選項之間有什么明顯的區別,但我只想更新項目 SDK,因為它實際上是您正在構建的 Web 項目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.