簡體   English   中英

WebApi 在調試時給出 404; 發表時有效

[英]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>這可以解釋為什么你會看到這個。

這意味着您看到的問題有幾個可行的解決方案:

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

我不知道這兩個選項之間有什么明顯的區別,但我只想更新項目 SDK,因為它實際上是您正在構建的 Web 項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM