我正在使用 MVC 3 和 vs2010 和 VB.NET。我在我的控制器上使用了“HandleError”,它工作得很好而且很简单,它会自动检测未处理的异常并将用户重定向到我选择的错误页面。但是,有一个问题。
这是我正在使用的操作方法的示例:
<HandleError>
Public Function ReportAProblem(DespatchNoteNo As String, DespatchNoteItemId As Long) As ActionResult
Dim uiview As New PickingReportAProblemVM(DespatchNoteNo, DespatchNoteItemId)
' Get the data for ReportAProblem
GetDataForReportAProblem(uiview)
Return View(uiview)
End Function
当用户通过以下方式操作 URL 时,会自动抛出异常,并将用户重定向到我的错误页面:
- .../?DespatchNoteNo=DN1234&DespatchNoteItemId=A(DespatchNoteItemId 的数据类型不正确)
- .../?DespatchNoteNo=DN1234&DespatchNoteItem=1(DespatchNoteItemId 的参数名称不正确)
似乎自动抛出了一个异常(如果我错了,请纠正我),它被 HandleError 拾取并且用户被重定向到我的错误页面。
但是,如果用户键入以下内容:
- .../?DespatchNote=DN1234&DespatchNoteItemId=1(DespatchNote 的参数名称不正确)
似乎没有抛出异常(如果我错了,请纠正我)并且用户没有被重定向到我的错误页面,而是代码继续。
据我所见,当我在调试时,当调用 action 方法时,在上述所有场景中,参数的值都设置为 Nothing。同样,不同之处似乎在于,对于除 String 类型之外的任何类型的参数,都会引发异常,而这似乎不是 String 类型的参数。
我显然稍后会在我的应用程序的服务层再次检查变量的内容,但在上述情况下(即用户一直在操作查询字符串并且应该将他/她的手指砍掉)我不想要代码完全进入服务层,而是将用户重定向到我的错误页面(就像非字符串数据类型发生的情况一样)。
如果用户操纵字符串类型查询字符串参数的名称,有谁知道引发异常的方法?还是我走错了路?