我有一个要求,以创建一个Get方法这需要在URL下面的参数名:
MS-MS规模对比毫秒琅
正如你所看到的,所有的名字中都有一个破折号,这是不可能在C#。 我该如何映射我的方法对这些参数的名字呢?
public HttpResponseMessage Get(int scale, string contrast string lang)
我有一个要求,以创建一个Get方法这需要在URL下面的参数名:
MS-MS规模对比毫秒琅
正如你所看到的,所有的名字中都有一个破折号,这是不可能在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) {}
请注意,如果你的数据来自URL,而不是身体这仅适用。 如何使它与POST数据的工作,我真的不知道此刻。