我有这样的行动:
public JsonResult Action(String deviceId, Guid clientId)
所以,根据url(带参数)就像
www.site/ControllerName/Action?deviceId=123&clientId= {some_guid}
毫无疑问,如果无法将{some_guid}解析为 Guid 类型,asp.net将生成错误。 问题是在这种错误的格式化请求的情况下,我需要服务器返回特殊的 JSON 结果,并带有{“result”:“1”之类的消息; “评论”:“网址错误。请查看参数 clientId ”} 如何在执行前检查操作参数?
答案 0 :(得分:3)
我会将您的签名更改为:
public ActionResult Action(String deviceId, string clientId)
然后你可以
Guid id;
if (!Guid.TryParse(clientId, out id))
{
// take appropiate action
}
答案 1 :(得分:2)
我会保留你所拥有的但可以使参数可以为空;
public ActionResult Action(String deviceId, Guid? clientId)
{
if (clientId.HasValue)
{
// Do something
}
else
{
throw new HttpException(404, "Url not found");
}
}
我意识到这几乎与上面相同,只有在这里你能够保持你的类型与原始帖子相同,只是检查是否已经传递了值
答案 2 :(得分:0)
您可能希望使用ModelBinder并在那里进行Guid.TryParse
检查。如果某些内容有错误,您可以修改ModelState。
第二种方法是使用一些特殊的动作过滤器属性,例如与ASP.NET MVC捆绑在一起的HandleErrorAttribute
。该过滤器可以捕获该特定类型的异常,并提供特定的错误处理工作流和结果替换(这里最好的想法可能只是重定向到404,因为“错误的Guid”只不过是“不存在的页面”)。
答案 3 :(得分:0)
我会做什么:
public ActionResult Action(int deviceId, string clientId)
{
Guid clientGuid;
if (!Guid.TryParse(clientId, out clientGuid))
{
throw new HttpException(404, "Action not found");
}
else
{
// Do some cool stuff....
}
}