Asp.net core mvc 向WebApi传递多个Get参数

Asp.net core mvc 向WebApi传递多个Get参数,asp.net-core-mvc,asp.net-core-webapi,Asp.net Core Mvc,Asp.net Core Webapi,我正在开发asp.net core 2.2应用程序。我想将两个参数(令牌和刷新令牌)传递给asp.net core 2.2 web api以检索新令牌。当我传递值时,我得到一个错误 处理请求时发生未处理的异常。 AggregateException:发生了一个或多个错误。(响应状态代码不表示成功:404(未找到)。) System.Threading.Tasks.Task.Wait(int毫秒计时,CancellationToken CancellationToken) HttpRequestE

我正在开发asp.net core 2.2应用程序。我想将两个参数(令牌和刷新令牌)传递给asp.net core 2.2 web api以检索新令牌。当我传递值时,我得到一个错误

处理请求时发生未处理的异常。 AggregateException:发生了一个或多个错误。(响应状态代码不表示成功:404(未找到)。) System.Threading.Tasks.Task.Wait(int毫秒计时,CancellationToken CancellationToken) HttpRequestException:响应状态代码不表示成功:404(未找到)

这是传递多个参数并对其进行路由的正确方法吗

requestUrl的构建如下所示:

string requestUrl = string.Format(Token_RefreshUserToken + "/{0}"+"/{1}", token,refreshToken);
requestUrl值为(web api控制器名称为“令牌”):

客户:

Task<TokenModel> userToken = _commonHelper.RecreateUserToken(tokenModel.TokenVal, tokenModel.RefreshToken);
userToken.Wait();

public async Task<TokenModel> RecreateUserToken(string token, string refreshToken)
    {          
         string url = string.Format(WebApiConstants.Token_RefreshUserToken + "/{0}"+"/{1}", token,refreshToken);
         var statusResponse = await _ApiHelper.GetAsync(url);
         tokenData = await statusResponse.Content.ReadAsAsync<TokenModel>();
return tokenData;
     }
Task userToken=\u commonHelper.RecreateUserToken(tokenModel.TokenVal,tokenModel.refreshtToken);
userToken.Wait();
公共异步任务重新创建UserToken(字符串标记、字符串刷新标记)
{          
string url=string.Format(WebApiConstants.Token_RefreshUserToken+“/{0}”+“/{1}”,Token,refreshToken);
var statusResponse=await\u ApiHelper.GetAsync(url);
tokenData=await statusResponse.Content.ReadAsAsync();
返回令牌数据;
}
Web Api方法:

[HttpGet]
[Route("Refresh/{token}/{refreshToken}")]
public async Task<TokenValue> Refresh(string token, string refreshToken){   //logic     }
[HttpGet]
[路由(“刷新/{token}/{refreshttoken}”)]
公共异步任务刷新(字符串标记,字符串刷新标记){//logic}

似乎是包含
双转义序列的请求造成了问题。在开发模式下,尝试使用Kestrel而不是IIS express运行web api项目

ASP.NET核心应用程序可以托管在各种web服务器上(IIS、Kestrel、Nginx、Apache等)。所有这些web服务器都不知道请求过滤(尤其是启用双转义),这是本机IIS功能。这是一个托管问题,ASP.NET核心应用程序不应该直接处理它。若URL like将到达ASP.NET核心管道,则加号将不会以任何特殊方式处理,并将以+字符的形式到达字符串模型

当您在IIS上托管应用程序时,web.config仍在使用中,因此您可以像配置普通ASP.NET应用程序一样配置

<system.webServer>
<security>
  <requestFiltering allowDoubleEscaping="true" />
</security>

如果您想在另一个Web服务器上托管应用程序,您应该检查它如何处理特殊字符。Kestrel只会按原样传递这样的URL,所以如果托管在Kestrel上,您不需要采取任何特定的操作


请参阅

为什么不在请求头中传递令牌,并使用http://code>HttpContext.request.headers[]
在api控制器中获取令牌?不建议在url中显示令牌。是的,我已在请求头中传递了令牌。但我仍然收到相同的错误。我试图发送的刷新令牌包含“/”、“+”等字符。我想这就是我收到“404(未找到)”错误的原因。我可以把它作为标题的一部分传递吗?
<system.webServer>
<security>
  <requestFiltering allowDoubleEscaping="true" />
</security>