Web APIのグローバルvaldiation属性を作成したかったのですが、だから私はtutorialに続き、次の属性になってしまった:ASP.NET MVC 4 RC Web API ModelStateエラー(null可能なオプションのURLパラメータ)
configuration.Filters.Add(new ValidationActionFilter());
それは私の行動のほとんどで素晴らしい作品:
public class ValidationActionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (actionContext.ModelState.IsValid)
{
return;
}
var errors = new List<KeyValuePair<string, string>>();
foreach (var key in actionContext.ModelState.Keys.Where(key =>
actionContext.ModelState[key].Errors.Any()))
{
errors.AddRange(actionContext.ModelState[key].Errors
.Select(er => new KeyValuePair<string, string>(key, er.ErrorMessage)));
}
actionContext.Response =
actionContext.Request.CreateResponse(HttpStatusCode.BadRequest, errors);
}
}
は、その後、私はGlobal.asaxの中にグローバルfitlersにこれを追加しましたオプションおよびnull可能なリクエストパラメータを持つアクションでは期待通りには動作しません。例えば
:私はルート作成
:そして内のアクションは、私のProductsController
:
public HttpResponseMessage GetAllProducts(int? skip, int? take)
{
var products = this._productService.GetProducts(skip, take, MaxTake);
return this.Request.CreateResponse(HttpStatusCode.OK, this._backwardMapper.Map(products));
}
今
私はこのURLを要求:http://locahost/api/products
私は応答を取得します403ステータスコードと次の内容:
[
{
"Key": "skip.Nullable`1",
"Value": "A value is required but was not present in the request."
},
{
"Key": "take.Nullable`1",
"Value": "A value is required but was not present in the request."
}
]
これらのパラメータはオプションでもnullでもかまいませんので、検証エラーとして表示されるべきではないと思います。
誰にもこの問題が発生して解決策が見つかりましたか?
良い点が、まだそれは問題を解決しませんここに。両方のパラメータが「必須」で、ModelStateディクショナリにエラーがあります。アクションパラメータを必須ではないとマークする方法について知っていますか? –
コードでこのソリューションを試しましたか? –
あなたの質問については、オプションのパラメータを使用してください –