ASP.net core API跨域請求的異常處理遇到的坑
阿新 • • 發佈:2018-11-09
首先,AP跨域請求,VS2017中nuget要加上中介軟體:
Microsoft.AspNetCore.Cors
我使用的2.1.1版本。
然後在Startup中這樣寫:
app.UseHttpsRedirection().UseCors(builder =>
builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());//.WithOrigins("http://example.com"));
其次,異常處理中,如果異常想用json格式輸出,交由前端ajax統一處理,由於請求中的異常產生的header並沒有包含在上述跨域中介軟體的處理,所以在輸出異常標頭時,應該如此操作:也是在Startup.cs中:
app.UseExceptionHandler(options => { options.Run( async context => { context.Response.StatusCode = (int)HttpStatusCode.InternalServerError; context.Response.ContentType = "application/json;charset=utf-8"; //此處要加上utf-8編碼 //如果不加此句,伺服器返回的資料到瀏覽器會拒絕 context.Response.Headers["Access-Control-Allow-Origin"] = "*"; var ex = context.Features.Get<IExceptionHandlerFeature>(); if (ex != null) { var errObj = new { message = ex.Error.Message, stackTrace = ex.Error.StackTrace, exceptionType = ex.Error.GetType().Name };// $"<h1>Error: {ex.Error.Message}</h1>{ex.Error.StackTrace }"; await context.Response.WriteAsync(JsonConvert.SerializeObject(errObj)).ConfigureAwait(false); } }); });
如果不這樣,要麼瀏覽器攔截了異常資訊,ajax獲取不到,要麼ajax產生的資訊是亂碼。