3

Null 許容 Guid をパラメーターとして渡すことができるようにしたい MVC Web API の get メソッドがあります。「?Id=null」で GET をセットアップすると、400 応答が返されます。空の GUID を渡すことはできますが、それはしたくありません。

URIを「id =、id = nullなど」に変更しても、nullは受け入れられません。これを機能させる方法を知っている人はいますか?

  [HttpGet]
  public User Get(Guid? Id)

ルート構成の更新

  config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

完全な HTTP 署名を取得します。sourceId は、id が null として渡したいパラメータです。

 [HttpGet]
  public IEnumerable<ActionItemsListViewModel> GetPagedList(int skip, int take, int page, int pageSize, [FromUri]List<GridSortInfo> sort, [FromUri] ActionItem.ActionItemStatusTypes? actionItemStatus, Guid? sourceId)

問題が見つかりました。このフィルターは、ModelState が無効であると言っていました。

public class ApiValidationActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
        if (!actionContext.ModelState.IsValid )
        {
            var errors = actionContext.ModelState
                .Where(e => e.Value.Errors.Count > 0)
                .Select(e => e.Value.Errors.First().ErrorMessage).ToList();

            actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.BadRequest, string.Join(" ", errors));
        }
    }
}
4

2 に答える 2

3

使用してみてください:

[HttpGet]
public User Get(Guid? Id = null)
于 2012-10-10T20:50:47.633 に答える
1

null を Guid に渡すことができましたか? 私が使うとき

  • クエリ文字列パラメータ: api/values?id=null
  • ルート パラメーター: api/values/null

コントローラ:

 public class ValuesController : ApiController
 {
     public User Get(Guid? Id)
     { ... }
 }
于 2012-10-10T21:15:15.537 に答える