ASP.NET Web API MVC 4中具有特殊字符的自定义参数名称

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

ms-scale ms-contrast ms-lang

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

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

使用FromUriAttribute

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

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

在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数据一起工作,我现在还不太确定。