繁体   English   中英

Swagger Page 在 MVC net-core 中找不到 404

[英]Swagger Page is 404 Not Found in MVC net-core

我有一个全新的 .NET-Core Web API 项目,我想使用 API 版本控制和 swagger。

当我尝试查看 swagger 页面时,我得到了 404。但是,模板附带的默认 ValuesController 有效。

这是我的设置:

启动.cs

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();

        // Add API Versioning
        services.AddApiVersioning(
            options =>
            {
                options.DefaultApiVersion = new ApiVersion(1, 0);
                options.AssumeDefaultVersionWhenUnspecified = true;
                options.ReportApiVersions = true;
            });

        // Add Swagger
        string pathToDoc = "RegistriesApi.xml";
        services.AddSwaggerGen(options =>
        {
            options.SwaggerDoc("v1",
                new Info
                {
                    Title = "Registries API",
                    Version = "v1",
                    Description = "A simple api to interact with AMA registries information",
                    TermsOfService = "None"
                });

            string filePath = Path.Combine(PlatformServices.Default.Application.ApplicationBasePath, pathToDoc);
            options.IncludeXmlComments(filePath);
            options.DescribeAllEnumsAsStrings();
        });
    }
    ...
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        // Url Path Rewriter
        RewriteOptions rewriteOptions = new RewriteOptions();
        if (!env.IsDevelopment())
        {
            rewriteOptions.AddRedirectToHttps();
        }
        else
        {
            app.UseDeveloperExceptionPage();
        }
        app.UseRewriter(rewriteOptions);

        // Use MVC
        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });

        // Swagger
        app.UseSwagger(c =>
        {
            c.PreSerializeFilters.Add((swagger, httpReq) => swagger.Host = httpReq.Host.Value);
        });
        app.UseSwaggerUI(
            c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "V1 Docs"); });
    }

值控制器.cs

[ApiVersion("1.0")]
[Route("api/v{version:apiVersion}/values")]
public class ValuesController : Controller
{
    // GET api/values
    [HttpGet]
    public IEnumerable<string> Get()
    {
        return new[] {"value1", "value2"};
    }

    // GET api/values/5
    [HttpGet("{id}")]
    public string Get(int id)
    {
        return "value";
    }

    // POST api/values
    [HttpPost]
    public void Post([FromBody] string value)
    {
    }

    // PUT api/values/5
    [HttpPut("{id}")]
    public void Put(int id, [FromBody] string value)
    {
    }

    // DELETE api/values/5
    [HttpDelete("{id}")]
    public void Delete(int id)
    {
    }
}

另外,这是我安装的所有库的版本:

<ItemGroup>
  <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.8" />
  <PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning" Version="2.2.0" />
  <PackageReference Include="Swashbuckle.AspNetCore" Version="2.4.0" />
</ItemGroup>

有没有人看到我可能做错了什么?

当我创建项目时,我不小心在签入中包含了 .vs 文件夹。当我从源代码管理中删除它时,无论出于何种原因,swagger 再次开始工作。

不确定解释是否是针对此的。

对我来说,@Tyler Findlay 解决方案没有奏效。 但是我以一种对我来说很好用的不同方式做到了。

  1. 重新创建项目,如果需要保护API,请确保勾选Configure for HTTPS复选框,基于此选项将部分代码添加到startup.cs
  2. 通过 Nuget 安装 Swashbuckle.AspNetCore.Swagger。
  3. 通过 Nuget 安装 Swashbuckle.AspNetCore.SwaggerGen 和 Swashbuckle.AspNetCore.SwaggerUI。 记住 AspNetCore.Swagger 内部安装了 SwaggerGen 和 UI,但您可以通过 Nuget 添加它。
  4. 编译项目并运行它。

希望这会帮助某人。

更新:URL 可以是 HTTP://localhost:/swagger/ui

我刚刚删除了解决方案根目录中的.vs文件夹。 现在它起作用了...

您可以通过添加以下代码“c.RoutePrefix = string.Empty;”来解决这个问题在 app.UseSwaggerUI 中

以上答案的组合对我有用:

app.UseSwaggerUI(c => {
    c.RoutePrefix = string.Empty;
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "Name of Your API v1");
});

以防万一,检查 Startup.cs 中的 Configure() 方法,如果它们不存在,则应添加这些行:

            app.UseSwagger();
            app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Name of Your API v1"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM