【发布时间】:2012-10-10 20:29:18
【问题描述】:
我有一个 MVC Web API get 方法,我希望能够将一个可为空的 Guid 作为参数传递。如果我使用“?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 Get签名,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));
}
}
}
【问题讨论】:
-
你有没有尝试不通过任何东西?
-
@murilokunze 是的,这确实有效,不幸的是,我与 api 一起使用的控件不允许我排除参数。
标签: asp.net-mvc asp.net-web-api