摇摇欲坠的用户界面在webapi中未显示任何内容 [英] swagger UI is not showing anything in 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屋!