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));
}
}
}