6

我需要创建一个 Get 方法,该方法在 URL 中采用以下参数名称:

ms-scale ms-对比度 ms-lang

如您所见,所有名称中都有一个破折号,这在 C# 中是不可能的。如何将我的方法映射到这些参数名称?

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

2 回答 2

8

使用FromUriAttribute

public HttpResponseMessage Get([FromUri(Name = "ms-scale")]int scale, [FromUri(Name = "ms-contrast")]string contrast, [FromUri(Name = "ms-lang")]string lang)
于 2013-11-25T10:37:33.023 回答
4

我在其他地方之前被问过这个问题并找到了这个答案:

在 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) {}

请注意,这仅适用于您的数据来自 uri 而不是正文的情况。如何使其与 POST 数据一起使用,我目前还不确定。

于 2012-09-06T11:00:06.927 回答