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