【问题标题】:Swashbuckle doesn't see any of my controllersSwashbuckle 没有看到我的任何控制器
【发布时间】:2018-03-21 18:04:14
【问题描述】:

我有 ASP MVC 5 项目,我在其中添加了 Web Api。现在我正在尝试安装 Swashbuckle(从引导程序) - 但它只显示一个没有任何控制器的空文档。

我的控制器:

 [RoutePrefix("api/v1/Test/Check")]
    public class TestController : ApiController
    {
        // GET: api/Test
        [HttpGet]
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET: api/Test/5
        [HttpGet]
        public string Get(int id)
        {
            return "value";
        }

        // POST: api/Test
        [HttpPost]
        public void Post([FromBody]string value)
        {
        }

        // PUT: api/Test/5
        [HttpPut]
        public void Put(int id, [FromBody]string value)
        {
        }

        // DELETE: api/Test/5
        [HttpDelete]
        public void Delete(int id)
        {
        }

        // GET: api/Test
        [Route("GetMetadata")]
        [HttpGet]
        public IEnumerable<string> GetMetadata()
        {
            return new string[] { "value2221", "value2" };
        }
    }

我的网络 API 配置:

  configuration.MapHttpAttributeRoutes();

  configuration.Routes.MapHttpRoute("Public API V1", "api/v1/{controller}/{id}",
                new { id = RouteParameter.Optional });

我的Global.asax.cs

public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(WebApiConfig.Register);
            //WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
    }

Swashbuckle 是默认配置。

生成的 swagger 文档如下所示:

{
  swagger: "2.0",
  info: {
    version: "v1",
    title: "WebServer"
  },
  host: "localhost:55309",
  schemes: [
    "http"
  ],
  paths: { },
  definitions: { }
}

我可以通过http://localhost:55309/api/v1/Test访问我的控制器

我不确定是否需要更改生成的 SwaggerConfig.cs 中的任何内容,但查看它并在 swashbuckle 文档上看起来它应该无需任何修改即可工作

【问题讨论】:

  • 你必须在你的方法上放置适当的属性,比如 HttpPost , HttpGet。试试这个
  • @osmanRahimi 不幸的是没有任何区别。还是不行
  • @Archeg 请向我们展示您使用这些属性的尝试。对于我们看不到的东西,我们无能为力。
  • 我认为您的问题是“ASP MVC 5 项目”尝试使用新的默认 WebApi 项目并添加 swashbuckle
  • @HelderSepu 可能是,但我需要 ASP MVC 5 + Web Api,所以这是不行的。如果我在单独的仅 Web Api 项目上执行此操作,它会起作用

标签: c# asp.net-web-api swashbuckle


【解决方案1】:

好的,我想我做到了。我不得不下载swashbuckle 源并调试它,但这是值得的。

原来问题不在于swashbuckle 本身,而在于ApiExplorer 由于某种原因有.ApiDescriptions 为空。

在我的调试过程中,我将这两行放在Application_Start() 的末尾,即使这些行没有做任何事情,魔法还是发生了,它开始起作用了:

var explorer = GlobalConfiguration.Configuration.Services.GetApiExplorer();
var descriptions = explorer.ApiDescriptions;

然后我更进一步,发现了这个话题:ASP.Net Web API Help Page Area returning empty output(见第一个答案) 我使用的是Glimpse,尽管我实际上安装它是为了解决swashbuckle 的问题! (我认为它可能会有所帮助 - 它没有,但 Glimpse 觉得这是一个不错的工具,所以我把它留在那里)

正如第一个答案所暗示的,我已经修改了web.config

<glimpse defaultRuntimePolicy="On" endpointBaseUri="~/Glimpse.axd">
<inspectors>
   <ignoredTypes>
      <add type="Glimpse.AspNet.Inspector.RoutesInspector, Glimpse.AspNet"/>
   </ignoredTypes>
</inspectors>
</glimpse>

并从Application_Start() 中删除了这两行,因为这不是修复。它开始工作了!

说实话,我不知道那里发生了什么。我清楚地记得在我开始使用Glimpse 之前它不起作用,因此安装一瞥并修复其中的问题并不像是对原始问题的正确修复,但我真的厌倦了这个问题并准备好了像这样关闭它。

希望这对某人有所帮助。

附:只是对那些尝试调试类似问题的人的警告。我的另一个错误是我没有在两次尝试之间关闭 IIS Express。它实际上使应用程序保持运行,因此即使您在 VS 中启动/停止应用程序,也不会重新应用配置。如果您使用配置 - 您需要在两次尝试之间关闭 ISS Express。

【讨论】:

    【解决方案2】:

    我在我的 web api 项目中遇到了同样的问题,我已经通过这种方式解决了:

    1) 首先我创建了以下扩展方法:

     public static class SwaggerExtensions
    {
        public static HttpConfiguration EnableSwagger(this HttpConfiguration httpConfiguration)
        {
            httpConfiguration
                .EnableSwagger(c => c.SingleApiVersion("v1", "WebApi"))
                .EnableSwaggerUi();
            return httpConfiguration;
        }
    }
    

    2) 然后在 Startup 类中:

     public void Configuration(IAppBuilder app)
        {
    
            var config = new HttpConfiguration();
    
            config.EnableSwagger();
            var webApiConfiguration = WebApiConfig.Register(config);
    
            //here I commented other startup code
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-27
      • 1970-01-01
      • 1970-01-01
      • 2019-05-12
      • 2017-05-26
      • 1970-01-01
      • 2020-05-21
      • 2019-05-20
      相关资源
      最近更新 更多