查询参数值

时间:2018-04-12 12:56:49

标签: asp.net asp.net-web-api

我有一个带有以下签名的ASP.NET WebAPI控制器操作:

public async Task<HttpResponseMessage> GetFoo(string something=null)

使用以下查询字符串调用此字符串时:GetFoo?something=%20我希望使用:something = " "调用该操作,而是将某些内容设置为null。

如何让控制器操作接受%20作为具有单个空格的字符串并将其传递给我的应用程序?

1 个答案:

答案 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)
{
    ...
}

你会得到你想要的,但它闻起来!我很想了解这种情况发生的原因。