6

URLで次のパラメーター名を受け取るGetメソッドを作成する必要があります。

ms-scale ms-contrast 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パラメーターでダッシュ(-)を使用する

更新しました

これをWebAPIで機能させるには、少し変更する必要があります。

[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 に答える