c# - C# MVC 动作结果
问题描述
我正在学习 ASP.MVC 并坚持一个问题,不知道这是否是解决问题的方法。
我有一个具有以下操作结果的控制器:
[Route("customers/show/{id}")]
public ActionResult Show(int id)
{
var customer = GetCustomers().SingleOrDefault(c => c.Id == id);
return View(customer);
}
问题是只要整数作为参数发送就没有问题。例如“/customers/show/123”,但如果有人尝试像这样访问“/customers/show/12xyz”,那么它会抛出一个像这样的丑陋错误:
Server Error in '/' Application.
The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult Show(Int32)' in 'MyApp.Controllers.CustomersController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.
Parameter name: parameters
我想避免该应用程序错误,所以我尝试像这样解决。这是正确的 MVC 方式还是有其他更聪明的方式?
[Route("customers/show/{id}")]
public ActionResult Show(string id)
{
int custId = 0;
int.TryParse(id, out custId);
var customer = GetCustomers().SingleOrDefault(c => c.Id == custId);
return View(customer);
}
解决方案
[Route("customers/show/{id}")]
public ActionResult Show(int? id)
{
var customer = GetCustomers().SingleOrDefault(c => c.Id == id);
if (customer == null)
{
return HttpNotFound();
}
return View(customer);
}
这样,如果数据库/文件/无论您在哪里搜索该 ID,都没有任何内容,您会向客户返回一个结果,让他们知道这一点;在这种情况下,HTTP 错误 404:未找到。
推荐阅读
- angular - Angular 7 (RxJs 6.x) - 如何使用 throwError
- angular - Angular:不推荐使用 forkJoin?
- c# - 如何处理 C# 应用程序上的数据库重复项?
- python - 对字典中的列表进行排序以返回与其他列表中的模式匹配的第一个值
- java - 避免布尔翻转的同步块
- php - 图像颜色在 php 中随 imagecreate 改变
- cron - omnilight/yii2-scheduling 不提供任何输出
- html - iframe chrome 72 中的拖放功能
- java - 如何从一个类的多个构造函数中调用一个通用的静态实用程序方法,而跨构造函数只调用一次?
- javascript - 有没有办法在 linux 或 windows 上为 javascript 调试 Iphone?