gpt4 book ai didi

c# - 将身份验证添加到/swagger/ui/index 页面 - Swagger |网络应用程序接口(interface) |虚张声势

转载 作者:太空狗 更新时间:2023-10-29 20:51:12 25 4
gpt4 key购买 nike

我正在开发一个 Swagger (Web API) 项目。
当我第一次运行该应用程序时,它会显示 Swagger UI 的登录页面。
因此,用户首先必须登录才能访问 Swagger UI 页面,但是,如果用户直接输入“http://example.com/swagger/ui/index”,那么他就可以访问 Swagger UI 页面。

据我所知,swagger-ui 由 swashbuckle 程序集提供服务。我的项目中没有源代码。

如果用户没有登录到 Swagger UI 页面,我如何让他重定向到登录页面?

最佳答案

最后,我用DelegtingHandler解决了这个问题,下面是我的做法:
创建文件 SwaggerAccessMessageHandler.cs 并将其添加到 App_Start 文件夹中。

using System;
using System.Net;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
public class SwaggerAccessMessageHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
if (IsSwagger(request) && !Thread.CurrentPrincipal.Identity.IsAuthenticated)
{
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.Redirect);
// Redirect to login URL
string uri = string.Format("{0}://{1}", request.RequestUri.Scheme, request.RequestUri.Authority);
response.Headers.Location = new Uri(uri);
return Task.FromResult(response);
}
else
{
return base.SendAsync(request, cancellationToken);
}
}

private bool IsSwagger(HttpRequestMessage request)
{
return request.RequestUri.PathAndQuery.Contains("/swagger");
}
}

接下来,在启用 Swagger 之前在 SwaggeConfig.cs 中连接处理程序,如下所示:

GlobalConfiguration.Configuration.MessageHandlers.Add(new SwaggerAccessMessageHandler());

GlobalConfiguration.Configuration.EnableSwagger(c =>
{
...
});

关于c# - 将身份验证添加到/swagger/ui/index 页面 - Swagger |网络应用程序接口(interface) |虚张声势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41295887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com