MVCではこれがエラーとは見なされない(つまり例外は発生しません)が、単にルートに一致しないため、通常通りIISが404を処理できるようになります。これをコードで処理するには、ルーティングリストの最後にワイルドカードルートを追加します。
Global.asax.vb…
routes.MapRoute(_
"FileNotFound", _
"{*key}", _
New With {.controller = "FileNotFound", _
.action = "Http404"} _
)
FileNotFoundController.vb…
Function Http404(ByVal key As String) As ActionResult
Dim RedirectId As Guid
Select Case key
Case "someold/path/andfile.php"
RedirectId = New Guid("68215c26-0abe-4789-968e-0187683409b6")
Case Else
RedirectId = Guid.Empty
End Select
If Not RedirectId = Guid.Empty Then
Response.StatusCode = Net.HttpStatusCode.MovedPermanently
Response.RedirectLocation = Url.RouteUrl("SomeOtherRoute", New With {.id = RedirectId})
Else
Throw New Exception("Unable to resolve route.")
End If
Return Nothing
End Function
これにより、意図したURLを見て、それをリダイレクトするターゲットURLを決定できます。
また、カスタム404ハンドラページを実装して、IISで直接設定することもできます。そのページ/コントローラのコードでは、意図したURLを見て、必要に応じてリダイレクトすることができます。
関連する質問:http://stackoverflow.com/questions/108813/404-http-error-handler-in-asp-net-mvc-rc-5 –