自定义参数名称处理ASP.NET Web API的特殊字符MVC 4(Custom Paramete

2019-06-27 22:08发布

我有一个要求,以创建一个Get方法这需要在URL下面的参数名:

MS-MS规模对比毫秒琅

正如你所看到的,所有的名字中都有一个破折号,这是不可能在C#。 我该如何映射我的方法对这些参数的名字呢?

public HttpResponseMessage Get(int scale, string contrast string lang)

Answer 1:

使用FromUriAttribute

public HttpResponseMessage Get([FromUri(Name = "ms-scale")]int scale, [FromUri(Name = "ms-contrast")]string contrast, [FromUri(Name = "ms-lang")]string lang)


Answer 2:

我之前在其他地方问这个,发现这样的回答:

使用破折号( - )在ASP.MVC参数

更新

为了得到这个工作,通过Web API,我们需要稍作修改。

[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public class BindParameterAttribute : ActionFilterAttribute
{
    public string ViewParameterName { get; set; }
    public string ActionParameterName { get; set; }

    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        var viewParameter = actionContext.Request.RequestUri.ParseQueryString()[ViewParameterName];
        if (!string.IsNullOrWhiteSpace(viewParameter))
            actionContext.ActionArguments[ActionParameterName] = viewParameter;

        base.OnActionExecuting(actionContext);
    }
}

以及如何使用它:

[BindParameter(ActionParameterName = "customData", ViewParameterName = "custom-data")]
public string Get(string customData) {}

请注意,如果你的数据来自URL,而不是身体这仅适用。 如何使它与POST数据的工作,我真的不知道此刻。



文章来源: Custom Parameter Names With Special Characters in ASP.NET Web API MVC 4