私はcustomErrors mode="RemoteOnly"
を使用していますが、エラーの詳細を管理者に電子メール通知で報告したいと考えています。私はどのようににHTTPエラーがスローされたときに詳細なエラー情報をキャプチャするのかわかりませんとビューが呼び出されます - 特にHTTP 500が必要です。エラーコントローラのHTTPエラーの詳細を取得します
コントローラに現在のエラーの詳細を挿入したいと思いますが、< - ここに詳細を追加してください。免責事項:私は、エラーメールやバックグラウンドThread
のパフォーマンスの問題を認識しており、「後で」最適化します。私はMVC 5.2.3.0を使用しています。
マイweb.config
:
<customErrors mode="RemoteOnly" defaultRedirect="/error/error">
<error statusCode="400" redirect="/error/badrequest" />
<error statusCode="403" redirect="/error/forbidden" />
<error statusCode="404" redirect="/error/notfound" />
<error statusCode="414" redirect="/error/urltoolong" />
<error statusCode="500" redirect="/error/internalserver" />
<error statusCode="503" redirect="/error/serviceunavailable" />
</customErrors>
マイerrorInfo
のviewmodel:
namespace MyProject.ViewModels
{
public class ErrorInfo
{
public string Code { get; set; }
}
}
マイErrorController
(のみHTTP 500を示す):asp.netのMVCでは
public ActionResult InternalServer()
{
ErrorInfo errorInfo = new ErrorInfo();
errorInfo.Code = "500 - Internal Server Error"; <-- *ADD DETAILS HERE*
SendHttpErrorAsync(errorInfo.Code);
return PartialView("Error", errorInfo);
}
public void SendHttpErrorAsync(string message)
{
Thread httpError = new Thread(delegate()
{
message = User.Identity.IsAuthenticated ? message + " | " + User.Identity.GetUserName() : message + " | anonymous";
message = message + " | " + Request.UserHostAddress; /*(::1 is localhost)*/
try
{
var requestUri = string.Format("http://ip-api.com/xml/{0}", Request.UserHostAddress);
var request = WebRequest.Create(requestUri);
var response = request.GetResponse();
var xdoc = XDocument.Load(response.GetResponseStream());
message = (xdoc.Element("query").Element("status").Value == "success") ? message + " | " + xdoc.Element("query").Element("city").Value : message + " | location unvailable";
}
catch
{
}
MyProject.Helper.Email.sendErrorEmail(message);
});
httpError.IsBackground = true;
httpError.Start();
}