簡體   English   中英

swagger UI 在 webapi 中沒有顯示任何內容

[英]swagger UI is not showing anything in webapi

我跟着這個到XML文檔的一部分,以便使用Swashbuckle創建揚鞭文檔。 它應該允許我通過(在我的情況下)查看端點:

http://localhost:51854/swagger/ui/index

不幸的是,我看不到任何端點:

在此處輸入圖片說明

任何想法為什么以及如何解決這個問題? 請注意,我從一個空的 webapi 項目創建了我的 webapi - 也許這就是問題所在。 肯定少了點什么,但我不確定是什么......

我現在已將以下代碼確定為根本原因。 在 Global.asax.cs 中:

var container = new XyzWebApiStructureMapContainerConfigurator().Configure(GlobalConfiguration.Configuration);
GlobalConfiguration.Configuration.Services
.Replace(typeof(IHttpControllerActivator),
new StructureMapHttpControllerActivator(container));

部分課程:

public class XyzWebApiStructureMapContainerConfigurator
{
    public IContainer Configure(HttpConfiguration config)
    {
        var container = new Container(new BlaWebApiRegistry());
        config.DependencyResolver = new StructureMapDependencyResolver(container);
        return container;
    }
}

public class StructureMapDependencyResolver : StructureMapDependencyScope, IDependencyResolver, IHttpControllerActivator
{
    private readonly IContainer _container;

    public StructureMapDependencyResolver(IContainer container)
        : base(container)
    {
        _container = container;
        container.Inject<IHttpControllerActivator>(this);
    }

    public IDependencyScope BeginScope()
    {
        return new StructureMapDependencyScope(_container.GetNestedContainer());
    }

    public IHttpController Create(
        HttpRequestMessage request,
        HttpControllerDescriptor controllerDescriptor,
        Type controllerType)
    {
        var scope = request.GetDependencyScope();
        return scope.GetService(controllerType) as IHttpController;
    }
}

PS:

簡化的控制器代碼:

[RoutePrefix("api/XYZ")]
public class BlaController : ApiController
{
    private readonly ISomething _something;

    public BlaController(ISomething something)
    {
        _something = something;
    }

    [Route("")]
    [HttpGet]
    public IHttpActionResult Resources([FromUri] BlaRequest blaRequest)
    {
        // something exciting
        return Ok(returnObject);
    }
}

繳費靈:

更多代碼:

// WebApiConfig

public static void Register(HttpConfiguration config)
{
    // Web API configuration and services  

    // Web API routes
    config.MapHttpAttributeRoutes();

    //var cors = new EnableCorsAttribute("*", "*", "*");
    config.EnableCors();

    config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
    );
}

// Global.asax.cs

public class WebApiApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        GlobalConfiguration.Configure(WebApiConfig.Register);

        GlobalConfiguration.Configuration.Formatters.Clear();
        GlobalConfiguration.Configuration.Formatters.Add(new JsonMediaTypeFormatter());

        var container = new XyzWebApiStructureMapContainerConfigurator().Configure(GlobalConfiguration.Configuration);
        GlobalConfiguration.Configuration.Services
        .Replace(typeof(IHttpControllerActivator),
            new StructureMapHttpControllerActivator(container));
    }
}

購買力平價:

{
swagger: "2.0",
info: {
version: "v1",
title: "Bla.Di.Bla"
},
host: "localhost:51854",
schemes: [
"http"
],
paths: { },
definitions: { }
}

原來這一行:

config.DependencyResolver = new StructureMapDependencyResolver(container);

在問題的類 XyzWebApiStructureMapContainerConfigurator 中引起了一些問題。

希望這對未來的人有所幫助。

有同樣的問題。 結果證明 DI(在我的例子中是 Unity)被配置為綁定所有加載的程序集(其中之一是 Swashbuckle.Core)。

只需稍微改進哪些程序集被綁定就解決了這個問題:

var assemblies = AppDomain.CurrentDomain.GetAssemblies().Where(asm => asm.FullName.StartsWith("MySolution.MyProject"));

// Web API configuration and services
var container = new UnityContainer();
container.RegisterTypes(
    AllClasses.FromAssemblies(assemblies),
    WithMappings.FromMatchingInterface,
    WithName.Default);

config.DependencyResolver = new UnityDependencyResolver(container);

我在 swagger 時遇到了同樣的問題,並花了很長時間來尋找解決方案。 終於拿到了一張。 將 [HttpGet] 或 [HttpPost] 屬性添加到每個控制器的操作方法。

[HttpPost]
public IActionResult TestMethod()
 {
  //// Some code
 }

我意識到這是一個老問題,但我剛剛遇到它並且對已經提出的問題有不同的解決方案。 我希望它對其他遇到問題的人有用。

該問題是由 Structuremap 掃描引起的。 我的 Structuremap.Registry 類中有以下幾行代碼

Scan(scan =>
{
    ....
    scan.AssembliesFromApplicationBaseDirectory();
    scan.TheCallingAssembly();
    scan.WithDefaultConventions();
});

scan.AssembliesFromApplicationBaseDirectory();

正在阻止 Swagger 工作。 我已將其更改為

scan.AssembliesFromApplicationBaseDirectory(MyDllsPathFilter());

現在 Swagger 按預期工作。

暫無
暫無

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

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