这是我的 Startup.cs 中的内容。 问题:不确定是否重复具有 EseExceptionHandler 和 UseStatusCodePagesWithRedirects?
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
//app.UseExceptionHandler("/Home/Error");
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Error/Error");
//app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.UseAuthentication();
app.UseStatusCodePagesWithRedirects("/Error/StatusCode/{0}");
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}");
});
}
这是我的 ErrorController。 我的印象是,对于 400-599 之间的所有状态代码,都应该转到 StatusCode 操作,对吗?
public class ErrorController : Controller
{
public IActionResult Index()
{
return View();
}
public IActionResult Error()
{
//var exception = HttpContext.Features.Get<IExceptionHandlerFeature>();
//var statusCode = HttpContext.Response.StatusCode;
//var message = exception.Error.Message;
//var stackTrace = exception.Error.StackTrace;
//return View();
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
[AllowAnonymous]
public IActionResult StatusCode(int? Id)
{
if (Id.HasValue && Id != null)
{
if (Id == 404 || Id == 500 || Id == 403)
{
var viewName = Id.ToString();
//return View("StatusCode");
return View("StatusCode", new ErrorViewModel { ErrorCode = Id.ToString() });
}
}
return View();
}
}
然后我有一个带有按钮的简单页面,该按钮触发 HTTPPost ajax 调用,将一些数据传递到后端方法 SendEmails 来执行一些工作。然后显示我在页面上嵌入的成功对话框。
$.ajax({
type: 'POST',
url: '@Url.Action("SendEmails")',
data: emails,
processData: false,
contentType: false,
success: function (response) {
if (response) {
$("#successfulDialog").dialog("open");
}
else {
$("#failedDialog").dialog("open");
}
},
error: function (request) {
alert(request.responseText);
}
});
到目前为止,SendEmails ajax 调用一切正常。但由于某种原因,我无法弄清楚当成功对话框显示时,ErrorController 中的 StatusCode 操作被调用几次并出现 404 错误。 我想知道有没有什么办法,我可以找出请求来自哪里来触发 404 错误,或者使用 UseDeveloperExceptionPage 或类似的方法来显示所有信息?
我尝试删除行 app.UseStatusCodePagesWithRedirects("/Error/StatusCode/{0}");在 Startup.cs 中,显然它停止将错误发送到 ErrorController 中的 StatusCode 操作,但它不会转到任何页面,我什至在家庭控制器中尝试了 app.UseExceptionHandler("/Home/Error") ,它没有也别去那里。
所以我想知道是否有人可以启发我应该去哪里或检查以找出页面上显示弹出对话框后触发 404 错误的原因。
谢谢你。