【问题标题】:I got a 404 on a double slash after upgrading to inProcess升级到 inProcess 后,我在双斜杠上得到 404
【发布时间】:2019-10-03 07:40:26
【问题描述】:
我有 .net core 2.2 web api
我将其升级为“inProcess”,使用双前向 slah 调用此服务的客户得到 404,当将其配置为“OutOfProcess”时,它工作得很好。
有问题的调用示例:
https://mMYApiAddress.co/api/GetSomeData//3
将其配置为“OutOfProcess”时,它工作得很好。
我希望我的 web api 能够使用“inProcess”配置,并且能够像以前一样使用双斜杠接听电话。
【问题讨论】:
标签:
c#
.net-core
get
query-string
asp.net-core-webapi
【解决方案1】:
配置“OutOfProcess”时,Kestrel web server 用于处理您的请求。
在 Kestrel Web 服务器中,会自动识别请求路径中的空格或多余的字符串,并将路径修改为正确的格式。
在配置“InProcess”时,使用 IIS HTTP 服务器(IISHttpServer)代替 Kestrel 服务器。请求由应用程序直接处理。所以你得到了 404 响应。
你可以自定义一个中间件来重写下面的 url:
public class RewriteRouteRule
{
public static void ReWriteRequests(RewriteContext context)
{
var request = context.HttpContext.Request;
if (request.Path.Value.Contains("values"))
{
string[] splitlist = request.Path.Value.Split("/");
var newarray = splitlist.Where(s => !string.IsNullOrEmpty(s)).ToArray();
var newpath = "";
foreach (var item in newarray)
{
newpath += "/" + item;
}
request.Path = newpath;
}
}
}
在 Startup.cs 的 Configure 方法中使用中间件
app.UseRewriter(new RewriteOptions()
.Add(RewriteRouteRule.ReWriteRequests)
);