Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Swagger未生成Swagger.json_C#_Asp.net Core_Swagger_Asp.net Core 2.1 - Fatal编程技术网

C# Swagger未生成Swagger.json

C# Swagger未生成Swagger.json,c#,asp.net-core,swagger,asp.net-core-2.1,C#,Asp.net Core,Swagger,Asp.net Core 2.1,我在一个解决方案中有asp.net核心MVC项目和单独的WebApi项目。我在github上的文档后面添加了这个招摇过市的内容。以下是我的mvc项目Startup.cs: public void ConfigureServices(IServiceCollection services) { //... // Adding controllers from WebApi: var controllerAssembly = Assembly.

我在一个解决方案中有asp.net核心MVC项目和单独的WebApi项目。我在github上的文档后面添加了这个招摇过市的内容。以下是我的mvc项目Startup.cs:

public void ConfigureServices(IServiceCollection services)
    {
        //...
        // Adding controllers from WebApi:
        var controllerAssembly = Assembly.Load(new AssemblyName("WebApi"));
        services.AddMvc(o =>
            {
                o.Filters.Add<GlobalExceptionFilter>();
                o.Filters.Add<GlobalLoggingFilter>();
            })
            .AddApplicationPart(controllerAssembly)
            .AddJsonOptions(options =>
            {
                options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
            });

        services.AddSwaggerGen(c =>
        {
            //The generated Swagger JSON file will have these properties.
            c.SwaggerDoc("v1", new Info
            {
                Title = "Swagger XML Api Demo",
                Version = "v1",
            });
        });

        //...
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        //...
        app.UseSwagger();
        app.UseSwaggerUI(c =>
        {
            c.SwaggerEndpoint("/swagger/v1/swagger.json", "Swagger XML Api Demo v1");
        });

        //...

        app.UseMvc(routes =>
        {
            // ...
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }
public void配置服务(IServiceCollection服务)
{
//...
//从WebApi添加控制器:
var controllerAssembly=Assembly.Load(新的AssemblyName(“WebApi”));
services.AddMvc(o=>
{
o、 Filters.Add();
o、 Filters.Add();
})
.AddApplicationPart(控制器部件)
.AddJsonOptions(选项=>
{
options.SerializerSettings.ReferenceLoopHandling=ReferenceLoopHandling.Ignore;
});
services.AddSwaggerGen(c=>
{
//生成的Swagger JSON文件将具有以下属性。
c、 大摇大摆的文件(“v1”,新信息
{
Title=“Swagger XML Api演示”,
Version=“v1”,
});
});
//...
}
公共无效配置(IApplicationBuilder应用程序,IHostingEnvironment环境)
{
//...
app.UseSwagger();
app.UseSwaggerUI(c=>
{
c、 swagger端点(“/swagger/v1/swagger.json”,“swagger XML Api演示v1”);
});
//...
app.UseMvc(路由=>
{
// ...
routes.MapRoute(
名称:“默认”,
模板:“{controller=Home}/{action=Index}/{id?}”);
});
}
以下是Nuget:

WebApi控制器属性路由:

[Route("api/[controller]")]
public class CategoriesController : Controller
{
    // ...
    [HttpGet]
    public async Task<IActionResult> Get()
    {
        return Ok(await _repo.GetCategoriesEagerAsync());
    }
    // ...
}
[路由(“api/[控制器]”)]
公共类分类控制器:控制器
{
// ...
[HttpGet]
公共异步任务Get()
{
返回Ok(等待_repo.getCategoriseAgerAsync());
}
// ...
}
当我尝试转到/swagger时,它找不到/swagger/v1/swagger.json:

我做错了什么


提前谢谢

这个问题困扰了我好几个小时。。。我找到了原因

检查下面的代码

..Startup.cs

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseMvc();
    app.UseSwagger(); // if I remove this line, do not work !
    app.UseSwaggerUi3();
}

只是想在这里增加我的经验。 我在
configureServices
中给出了
V1
(注意caps中的
V
)和

然后在
configure
方法中,它是在小案例中使用的

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseMvc();
        app.UseSwagger();
        app.UseSwaggerUI(c =>
        {
            c.SwaggerEndpoint("/swagger/v1/swagger.json", "Tiny Blog V1");
        });
    }

可能对某人有帮助。

您是否检查了输出文件夹以查看
json
文件是否确实存在?您是否正在使用Kestrel或其他Web服务器(iisexpress)。
Configure
中的注释部分不包含if-dev-env-something?你有一个发布版本,它永远不会像这里那样命中它:@JamieRees,是的,我已经搜索了json。它不在项目文件夹中。如果您将
.UseMvc()
放在Swagger之前,它是否有效?我的代码顺序是)MVC 2)Swagger,但我不知道这是否有原因:)@JPHellemons,我尝试过IIS Express和IIS,没有特定于环境的代码如何将Swagger.json导出到本地物理位置?只需使用端点即可。例如,对我来说,位置是
https://localurl/swagger/v1/swagger.json
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseMvc();
        app.UseSwagger();
        app.UseSwaggerUI(c =>
        {
            c.SwaggerEndpoint("/swagger/v1/swagger.json", "Tiny Blog V1");
        });
    }