该如何避免GUID 不完整的出错情况?
来源:11-9 【应用】定制用户模型并添加初始化用户数据

要你命三千
2021-01-15
在5.3小节中,测试TouristRoutesController 返回单个旅游路线,
如果访问/api/touristroutes/39996f34-013c-4fc6-b1b3-0c1036c47110,或者不存在GUID,都会正常返回josn ,或者 旅游路线39996f34-013c-4fc6-b1b3-0c1036c47910找不到
但输入不完整的GUID如“39996f34-013c-4fc6-b1b3-”则会返回
{“type”:“https://tools.ietf.org/html/rfc7231#section-6.5.1",“title”:"One or more validation errors occurred.”,“status”:400,“traceId”:"|6f350332-487bb43dff89de50.",“errors”:{“touristRouteId”:[“The value ‘39996f34-013c-4fc6-b1b3-0c1036c4711’ is not valid.”]}}
按理说如果输入不完整的GUID应该返回
“旅游路线39996f34-013c-4fc6-b1b3-0c1036c47910找不到”
怎么会返回 {“type”:"https://tools.ietf.org…,与视频教程反馈的情况不一样
该如何避免这种情况?
1回答
-
hello同学你好啊,在上一个问题中我回答了你出现错误的原因,不过相信你自己也已经找到错误原因了。那么我们接下来讨论一下如何避免输入不正确的GUID参数报错这个问题。
首先,不得不承认,这个问题的出现有一定的原因是课程对这个api设计上不合理所导致的。因为我在准备课程的时候确实没有考虑过可能输入错误的GUID这种可能性。
那么我们改如何避免呢?从本质上来说,guid实际上就是string类型的一种特殊表现,所以我们可以修改一下GetTouristRouteById这个函数的签名,改为GetTouristRouteById(string touristRouteId .....), 使用string类型的参数代替GUID类型参数,这样就不会出现因为参数不合法而直接保存的情况了。
然后,请求进入函数以后,尝试将string类型的GetTouristRouteById转换为GUID,如果转换过程失败,那么我们可以直接return 404 not found;如果成功,则继续后续代码。
大概思路就是这样,如果还是不理解,请继续追问。谢谢。
012021-01-18
相似问题