2016-03-04 16 views
11

新しいasp .net CORE/MVC 6プロジェクトで基本的なスワッガーAPI docをセットアップしようとしていて、スワッガーUIから500エラーが発生しました: 500 : http://localhost:4405/swagger/v1/swagger.json500 asp .net CORE/MVC 6アプリケーションでスワッガーを設定するときのエラー

マイ起動クラスそれに次のコードがあります。設定の下

using Swashbuckle.SwaggerGen; 
using Swashbuckle.SwaggerGen.XmlComments; 
using Swashbuckle.Application; 
.... 
public void ConfigureServices(IServiceCollection services) 
{ 
    ... 
    services.AddSwaggerGen(); 
    services.ConfigureSwaggerDocument(options => 
    { 
    options.SingleApiVersion(new Info 
    { 
     Version = "v1", 
     Title = "Blog Test Api", 
     Description = "A test API for this blogpost" 
    }); 
    }); 
} 

、その後:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
{ 
.... 
    app.UseSwaggerGen(); 
    app.UseSwaggerUi(); 
.... 
} 

私はプロジェクトをビルドして実行、UIをswagger/UI/index.htmlに行くと上に出ますが、上記の500エラーが表示されます。 Failed to load resource: the server responded with a status of 500 (Internal Server Error)

私は500の根本的な原因を把握や図形を闊歩して追加のデバッグを有効にすることができますどのような方法があります:私が闊歩/ V1/swagger.jsonリンクに行くと、コンソールには、次の500エラーになりますなぜこのエラーを投げているのですか?私が見てきたチュートリアルのいくつかに基づいて、私がスタートアップで持っているものだけがベースの実装に必要です。追加情報があれば教えてください。

EDIT:これはRC1のためであり、現在はアウト(2016年6月29日)

答えて

27

- のよう

マイproject.jsonファイルが見えます。スタックトレースに深く入っています。 System.NotSupportedException:無制限HTTP動詞' api/hotels '。あなたはHttpMethodAttributeが欠けていますか?

それは私が私のAPIメソッドのいずれかのHTTPGET属性が欠落していたが判明:私は追加する可能性がある場合とき、あなたのルートレベルにあなたのルート

[Microsoft.AspNetCore.Mvc.HttpGet] 
+2

私はこの修正を確認します。 – mabead

+0

また私のために働いた。 –

+0

私のために働いた。 –

-1

がこのプロジェクトで外観を与える新しいnetcore 1.0に関連していないかもしれません。 https://github.com/domaindrivendev/Ahoy/tree/master/test/WebSites/Basic

このレポは、Swashbuckle'sの所有者からのもので、基本的なASP.NET 5サンプルアプリで、これは、あなたにミドルウェアを設定(およびそれらの注文について世話を修正するためにあなたを助ける事it's、例えばあります使用:wwwrootの "app.UseSwaggerGen(); app.UseSwaggerUi();; app.UseMvc後の()を見て与えるあなたapplcationでロギングを有効にするには)

https://docs.asp.net/en/latest/fundamentals/logging.html?highlight=logging を(ログが内部で生成されます" "フォルダ

+0

私は実際にスワッシュバックルを追加したいプロジェクトでこれを動作させようとしましたが、動作しません。私はコントローラのルートに何かがあって、それがハングアップするかもしれないと思う。上記の後、問題なく新しい.netプロジェクトに追加することができました。私が実行している問題は間違いなくプロジェクト固有です。受け入れられた回答としてマークし、どの特定のルートが問題を引き起こしているかを判断できる場合は、元の質問を更新します。ありがとう! – CBerg

-2

Swaggerの設定はバージョンによって大きく異なります。この回答はSwashbuckle 6.0.0-beta9とAsp.Netですコア1.0。 Startup.csのConfigureServices方法の内部では、あなたが追加する必要がある -

services.AddSwaggerGen(c => 
    { 
     c.SingleApiVersion(new Info 
     { 
     Version = "v1", 
     Title = "My Awesome Api", 
     Description = "A sample API for prototyping.", 
     TermsOfService = "Some terms ..." 
     }); 
    }); 

を次にあなたが追加する必要があります設定方法に -

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
{ 
    loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
    loggerFactory.AddDebug(); 

    app.UseMvc(); 
    app.UseSwaggerGen(); 
    app.UseSwaggerUi(); 
} 

あなたはStartup.csで参照されていることを確認してください -

Swashbuckle.SwaggerGen.Generatorを使用しています。私も500エラーを得た

最初
"dependencies": { 
    "Microsoft.AspNetCore.Mvc": "1.0.0-rc2-final", 
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0-rc2-final", 
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0-rc2-final", 
    "Microsoft.EntityFrameworkCore.SqlServer": "1.0.0-rc2-final", 
    "Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.0-rc2-final", 
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-*", 
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0-rc2-final", 
    "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0-rc2-final", 
    "Microsoft.Extensions.Configuration.Json": "1.0.0-rc2-final", 
    "Microsoft.Extensions.Logging": "1.0.0-rc2-final", 
    "Microsoft.Extensions.Logging.Console": "1.0.0-rc2-final", 
    "Microsoft.Extensions.Logging.Debug": "1.0.0-rc2-final", 
    "Swashbuckle": "6.0.0-beta9" 
    }, 

    "tools": { 
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": { 
     "version": "1.0.0-preview1-final", 
     "imports": "portable-net45+win8+dnxcore50" 
    }, 
    "Microsoft.EntityFrameworkCore.Tools": { 
     "version": "1.0.0-preview1-final", 
     "imports": [ 
     "portable-net45+win8+dnxcore50", 
     "portable-net45+win8" 
     ] 
    } 
    }, 

    "frameworks": { 
    "net452": { } 
    }, 
    "buildOptions": { 
    "emitEntryPoint": true, 
    "preserveCompilationContext": true, 
    "xmlDoc": false 
    }, 

    "publishOptions": { 
    "include": [ 
     "wwwroot", 
     "Views", 
     "appsettings.json", 
     "web.config" 
    ] 
    }, 

    "scripts": { 
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ] 
    } 
} 
+0

これはローカルホスト上で動作します。配備時ではありません –

0

また、設定闊歩がそれを好きではありませんコントローラ。たとえば:

はこれをしないでください。私は内部サーバーエラーを取得した理由は、このためであったことを把握することは私にしばらく時間がかかった

[Produces("application/json")] 
[Authorize] 
public class myController 
{ 
    [SwaggerResponse((int)System.Net.HttpStatusCode.OK, Type = typeof(RestOkResponse<Response>))] 
    [SwaggerResponse((int)System.Net.HttpStatusCode.InternalServerError, Type = typeof(RestErrorResponse))] 
    [SwaggerResponse((int)System.Net.HttpStatusCode.BadRequest, Type = typeof(RestErrorResponse))] 
    [SwaggerResponse((int)System.Net.HttpStatusCode.Forbidden, Type = typeof(RestErrorResponse))] 
    [SwaggerResponse((int)System.Net.HttpStatusCode.NotFound)] 
    [HttpPost("/v1/myController")] 
    [Authorize()] 
    public async Task<IActionResult> Create([FromBody] MyObject myObject) 
    { 
     return Ok(); 
    } 
} 

[Produces("application/json")] 
[Route("/v1/myController")] 
[Authorize] 
public class myController 
{ 
    [SwaggerResponse((int)System.Net.HttpStatusCode.OK, Type = typeof(RestOkResponse<Response>))] 
    [SwaggerResponse((int)System.Net.HttpStatusCode.InternalServerError, Type = typeof(RestErrorResponse))] 
    [SwaggerResponse((int)System.Net.HttpStatusCode.BadRequest, Type = typeof(RestErrorResponse))] 
    [SwaggerResponse((int)System.Net.HttpStatusCode.Forbidden, Type = typeof(RestErrorResponse))] 
    [SwaggerResponse((int)System.Net.HttpStatusCode.NotFound)] 
    [HttpPost] 
    [Authorize()] 
    public async Task<IActionResult> Create([FromBody] MyObject myObject) 
    { 
     return Ok(); 
    } 
} 

これを行いますルーティングの問題。これが誰かを助けることを願って!

2

最初に、デベロッパーの例外ページを有効にするには、どちらが根本的な原因であるかを確認するために、Configure()にapp.UseDeveloperExceptionPage();を追加します。見てくださいhere

私の場合、問題は私もMicrosoft.AspNetCore.StaticFilesナゲットをインストールしてスワッガーを動作させる必要があるということでした。

Swashbuckle.AspNetCoreナゲットをアンインストール/再インストールすることもお試しください。

+0

これは私のために修正されました – rfcdejong

+0

Swashbuckle.AspNetCoreが機能しません –

関連する問題