.net 当传递某些编码的特殊字符时,Web API返回404

.net 当传递某些编码的特殊字符时,Web API返回404,.net,json,asp.net-web-api2,.net,Json,Asp.net Web Api2,我使用带有属性路由的WebAPI2来授权用户,为此,我使用纯文本密码(在初始登录时)或加密密码(在后续登录时)调用该方法。使用纯文本密码的初始调用非常有效,但当我尝试传递包含编码特殊字符的加密密码时,它返回404错误代码 当我从密码字符串中删除编码的特殊字符(:'%3A'和+'%2B')时,调用工作正常;我还尝试了一个比加密字符串长得多的字符串,以排除最大长度的问题,同样,它工作正常 编码的API调用如下所示: https://<domain>/auth/AuthoriseUser/

我使用带有属性路由的WebAPI2来授权用户,为此,我使用纯文本密码(在初始登录时)或加密密码(在后续登录时)调用该方法。使用纯文本密码的初始调用非常有效,但当我尝试传递包含编码特殊字符的加密密码时,它返回404错误代码

当我从密码字符串中删除编码的特殊字符(:'%3A'和+'%2B')时,调用工作正常;我还尝试了一个比加密字符串长得多的字符串,以排除最大长度的问题,同样,它工作正常

编码的API调用如下所示:

https://<domain>/auth/AuthoriseUser/bob/1000%3AsK6xKXyNORYSoDbNDMnIjhLxZxReYh6ji%3AJmomj1IxqHGXXFXVJSdA5MxpkUWB1OM%2B/Android/true

任何帮助都将不胜感激

我的猜测是,在尝试解密密码字符串/将其与服务器端加密密码进行比较之前,您没有对密码字符串进行url解码。另外,请告诉我您正在使用https,我肯定是在使用https(请参见上面的URL),我还可以确认调用实际上没有到达API,因此它肯定不是解码问题。这只是一种预感,但可能路由器在尝试匹配参数之前正在解码整个URL,而
%3A
作为
将导致无效的url,因此您将得到404。另外,您发送这样的密码有什么原因吗?为什么不使用基本64编码的
授权
头?
[Route("auth/AuthoriseUser/{username}/{password}/{appId}/{passwordEncrypted}")]