我有一个带有以下签名的ASP.NET WebAPI控制器操作:
public async Task<HttpResponseMessage> GetFoo(string something=null)
使用以下查询字符串调用此字符串时:GetFoo?something=%20
我希望使用:something = " "
调用该操作,而是将某些内容设置为null。
如何让控制器操作接受%20
作为具有单个空格的字符串并将其传递给我的应用程序?
答案 0 :(得分:0)
这是非常令人惊讶的,但你是对的。似乎MVC在路由值中解析出一个空格。
我有一个适合你的解决方案,但它更像是一个解决方案,而不是一个实际的答案。
添加此课程:
public sealed class AllowSingleSpaceAttribute : ActionFilterAttribute
{
private readonly string _routeValueName;
public AllowSingleSpaceAttribute(string valueName)
{
_routeValueName = valueName;
}
public override void OnActionExecuting(ActionExecutingContext context)
{
base.OnActionExecuting(context);
if (context.ActionArguments.ContainsKey(_routeValueName))
{
if (context.HttpContext.Request.Query[_routeValueName] == " ")
{
context.ActionArguments[_routeValueName] = " ";
}
}
}
}
然后装饰你的控制器:
[AllowSingleSpace("something")]
public async Task<HttpResponseMessage> GetFoo(string something=null)
{
...
}
你会得到你想要的,但它闻起来!我很想了解这种情况发生的原因。