我正在尝试使用Messagehandler解密http url中可用的ID。即使我在解密后获得了正确的URL。
解密前的网址http://localhost:ip/v1/controller/abcd
解密后的网址http://localhost:ip/v1/controller/1
以下是我的MessageHandler的逻辑。
UriBuilder builder = new UriBuilder();
string replacedParam = querySegment.Replace("/", "");
builder.Path = builder.Path.Replace(replacedParam, Cryptor.DecryptString(replacedParam));
request.RequestUri = builder.uri;
HttpResponseMessage response = await base.SendAsync(request, cancellationToken);
在Controller端,路由期望整数类型的id参数。即使MessageHandler将加密密钥更改为整数值,但仍未调用端点。
[Route("{id}")]
[HttpGet]
ResponseType(typeof(ChannelViewModel))]
public async Task<IHttpActionResult> GetByIdAsync([FromUri]int id)
错误: “参数字典包含方法'System'的非可空类型'System.Int32'的参数'id'的空条目。
如果我用整数参数调用路由它可以正常工作。但是如果我用加密密钥调用路由并且MessageHandler将密钥更改为整数值,则路由仍将其视为字符串,而处理程序将其发送为整数值。相同的MessageHandler与我的其他两个项目一起工作正常。但是在这个问题上找不到问题。