摇摇欲坠的用户界面在webapi中未显示任何内容 [英] swagger UI is not showing anything in webapi

查看:74
本文介绍了摇摇欲坠的用户界面在webapi中未显示任何内容的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直遵循

任何想法为何以及如何解决此问题?请注意,我是从一个空的webapi项目创建了我的webapi的-也许就是这个问题.一定要丢失一些东西,但是我不确定是什么...

我现在确定以下代码是根本原因.在Global.asax.cs中:

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

某些班级:

 公共类XyzWebApiStructureMapContainerConfigurator{公共IContainer Configure(HttpConfiguration config){var container = new Container(new BlaWebApiRegistry());config.DependencyResolver =新的StructureMapDependencyResolver(container);返回容器;}}公共类StructureMapDependencyResolver:StructureMapDependencyScope,IDependencyResolver,IHttpControllerActivator{私有只读IContainer _container;公共StructureMapDependencyResolver(IContainer容器):基本(容器){_container =容器;container.Inject< IHttpControllerActivator>(this);}公共IDependencyScope BeginScope(){返回新的StructureMapDependencyScope(_container.GetNestedContainer());}公共IHttpController创建(HttpRequestMessage请求,HttpControllerDescriptor controllerDescriptor,控制器类型(Type){var scope = request.GetDependencyScope();以IHttpController的形式返回scope.GetService(controllerType);}} 

PS:

简化的控制器代码:

  [RoutePrefix("api/XYZ")]公共类BlaController:ApiController{私有只读ISomething _something;公共的BlaController(有些东西){_something =某物;}[路线("")][HttpGet]公共IHttpActionResult资源([FromUri] BlaRequest blaRequest){//一些令人兴奋的事情返回Ok(returnObject);}} 

PPS:

更多代码:

//WebApiConfig

 公共静态无效寄存器(HttpConfiguration配置){//Web API配置和服务//Web API路由config.MapHttpAttributeRoutes();//var cors = new EnableCorsAttribute("*","*","*");config.EnableCors();config.Routes.MapHttpRoute(名称:"DefaultApi",routeTemplate:"api/{controller}/{id}",默认值:new {id = RouteParameter.Optional});} 

//Global.asax.cs

 公共类WebApiApplication:System.Web.HttpApplication{受保护的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),新的StructureMapHttpControllerActivator(container));}} 

PPPS:

  {昂首阔步:"2.0",信息:{版本:"v1",标题:"Bla.Di.Bla"},主机:"localhost:51854",方案:["http"],路径:{},定义:{}} 

解决方案

显示以下内容:

  config.DependencyResolver = new StructureMapDependencyResolver(container); 

问题的类XyzWebApiStructureMapContainerConfigurator中的

引起了一些问题.

希望这对以后的人有帮助.

I followed this up to the xml doc part in order to create Swagger documentation using Swashbuckle. It should allow me to view the endpoints via (in my case):

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

Unfortunately, I cannot see any endpoints:

Any ideas why and how to fix this? Please note that I created my webapi from an empty webapi project - maybe that's the problem. Something must be missing but I am not sure what ...

I have now identified the following code as the root cause. In Global.asax.cs:

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

Some classes:

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:

Simplified controller code:

[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);
    }
}

PPS:

More code:

// 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));
    }
}

PPPS:

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

解决方案

Turns out this line:

config.DependencyResolver = new StructureMapDependencyResolver(container);

in the question's class XyzWebApiStructureMapContainerConfigurator caused some issues.

Hope this helps someone in the future.

这篇关于摇摇欲坠的用户界面在webapi中未显示任何内容的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆