C# 如何从根url重定向到/swagger/ui/index?

C# 如何从根url重定向到/swagger/ui/index?,c#,asp.net-web-api,swagger,swashbuckle,C#,Asp.net Web Api,Swagger,Swashbuckle,我有一个安装了Swashback的WebApi项目 在默认设置中,我必须在浏览器中打开http://localhost:56131/swagger/ui/index查看我的操作说明和测试页面。我希望它可以从网站的根目录访问:http://localhost:56131/。如何实现这一点?如果您确实使用Web API项目,您可以: 使能 在现有或新控制器中创建以下方法: [路由(“”,HttpGet] [ApiExplorerSettings(IgnoreApi=true)] 公共HttpRe

我有一个安装了Swashback的WebApi项目


在默认设置中,我必须在浏览器中打开
http://localhost:56131/swagger/ui/index
查看我的操作说明和测试页面。我希望它可以从网站的根目录访问:
http://localhost:56131/
。如何实现这一点?

如果您确实使用Web API项目,您可以:

  • 使能
  • 在现有或新控制器中创建以下方法:
[路由(“”,HttpGet]
[ApiExplorerSettings(IgnoreApi=true)]
公共HttpResponseMessage重定向到WaggerUI()
{
var httpResponseMessage=新的httpResponseMessage(HttpStatusCode.Found);
httpResponseMessage.Headers.Location=新Uri(“/swagger/ui/index”,UriKind.Relative);
返回httpResponseMessage;
}
请注意使用了
ApiExplorerSettings
属性,这样它就不会出现在招摇定义中。

受稍微修改的代码的影响:

public类WebApiConfig
{
公共静态无效配置(IAppBuilder应用程序)
{
var httpConfig=new HttpConfiguration();
//属性路由

config.maphttpAttribute路由(); //将root重定向到Swagger用户界面 config.Routes.MapHttpRoute( 名称:“招摇过市用户界面”, routeTemplate:“”, 默认值:null, 约束:null, 处理程序:新的重定向处理程序(SwaggerDocsConfig.DefaultRootUrlResolver,“swagger/ui/index”); //使用此WebApi HttpConfiguration配置OWIN app.UseWebApi(httpConfig); } }
这样就不必像@bsoulier在回答中那样创建新的WebAPI控制器


此解决方案基于
swashback.Core
组件中已有的类
RedirectHandler

上述答案的更简单变体:

public class DefaultController : Controller
{
    [Route(""), HttpGet]
    [ApiExplorerSettings(IgnoreApi = true)]
    public RedirectResult RedirectToSwaggerUi()
    {
        return Redirect("/swagger/");
    }
}

越简单越好!这一行适合我。

如果任务允许,在_layout.chtml中,只需在标题中添加以下行:


在属性launchsettings.json中为
.net core
加载页面后,这将在swagger/index上重定向您,并修改配置文件和api部分以指向swagger

profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "api/swagger",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "authapi": {
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "api/swagger",
      "applicationUrl": "https://localhost:5001;http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }

在asp.net core 2.1/2.2中的launchSetting.Json中更改
launchUrl=“swagger/index.html”
的值

"ProjectName": {
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "swagger/index.html",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "http://localhost:44333"
    }

如果您正在运行dotnet core,只需转到properties->launchsettings.json并注释掉或删除launchUrl,然后将swagger RoutePrefix设置为string.Empty。

对于ASP Net core>2.2中的RESTFUL API,请在Project/properties/Debug中设置默认URL

和launchSettings.json将自动更新:

"profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "swagger/index.html",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },

你能解决这个问题吗@kpa6uk?@Sampada不,我没有。我相信这可以通过一些web api重定向来解决,而swagger就是我的例子。为了进一步研究,我暂停了这项任务。你看了我的答案了吗?如果把它标记为解决方案helped@bsoulier我当然做了,但我还没有机会测试它,对不起。当我测试你的答案时,我肯定会这样做。你可以查看url-很高兴你指出了.trim('/')-我第一次错过了这个!那么Asp.net Core呢?@SyaifulNizamYahya尝试一下Asp.net Core的解决方案:如何启用Http属性路由?在软件包管理器控制台中安装软件包Microsoft.AspNet.WebApi.WebHost似乎没有做到这一点。config.maphttpAttribute()完美!这对我来说效果更好,因为我的RouteConfig中已经有一些奇怪的路由,我不想碰它。正如你所看到的,这个问题是针对WebAPI的,那里没有html内容。如果你编辑这个答案以使用预格式化的文本块,这会很有帮助。这个设置会被复制到发布目录吗?它似乎只对发展有用。。。