该如何避免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回答

阿莱克斯刘

2021-01-18

hello同学你好啊,在上一个问题中我回答了你出现错误的原因,不过相信你自己也已经找到错误原因了。那么我们接下来讨论一下如何避免输入不正确的GUID参数报错这个问题。

//img.mukewang.com/szimg/6004f9dd0904976b13820386.jpg

  • 首先,不得不承认,这个问题的出现有一定的原因是课程对这个api设计上不合理所导致的。因为我在准备课程的时候确实没有考虑过可能输入错误的GUID这种可能性。

  • 那么我们改如何避免呢?从本质上来说,guid实际上就是string类型的一种特殊表现,所以我们可以修改一下GetTouristRouteById这个函数的签名,改为GetTouristRouteById(string touristRouteId .....), 使用string类型的参数代替GUID类型参数,这样就不会出现因为参数不合法而直接保存的情况了。

  • 然后,请求进入函数以后,尝试将string类型的GetTouristRouteById转换为GUID,如果转换过程失败,那么我们可以直接return 404 not found;如果成功,则继续后续代码。

大概思路就是这样,如果还是不理解,请继续追问。谢谢。


0
1
要你命三千
非常感谢!
2021-01-18
共1条回复

.Net 开发电商后端API 从0到精通RESTful

. Net 实战+RESTful思想纵深课程,开发优雅RESTful风格API。

977 学习 · 547 问题

查看课程