C# 如何为ABP中的默认异常响应添加值?
我想向异常添加一个ID(GUID),并且:C# 如何为ABP中的默认异常响应添加值?,c#,asp.net-core,aspnetboilerplate,C#,Asp.net Core,Aspnetboilerplate,我想向异常添加一个ID(GUID),并且: 记录下来 将其返回到客户端json响应 我应该在何处生成此日志ID值并将其添加到记录的异常消息中。在哪里更改以下默认响应 { "targetUrl": null, "result": null, "success": false, "error": { "message": "An internal error occurred during your request!", "details": "..." },
{
"targetUrl": null,
"result": null,
"success": false,
"error": {
"message": "An internal error occurred during your request!",
"details": "..."
},
"unAuthorizedRequest": false
}
我正在使用.NET Core版本。如果要禁用显示特定AJAX调用的消息,请在abp.AJAX选项中添加
abpHandleError:false
或者,您可以禁用框架异常包装器的默认行为
public class PeopleController : AbpController
{
[HttpPost]
[WrapResult(WrapOnSuccess = false, WrapOnError = false)]
public JsonResult SavePerson(SavePersonModel person)
{
//TODO: save new person to database and return new person's id
return Json(new {PersonId = 42});
}
}
另一件事是;您可以通过以下配置向客户端发送异常详细信息
...
using Abp.Web.Configuration;
...
public override void PreInitialize()
{
Configuration.Modules.AbpWebCommon().SendAllExceptionsToClients = true;
}
...
结果包装和异常处理: 如果操作已成功执行,ASP.NET样板文件默认情况下不会包装Web API操作。但是,它处理并包装异常。您可以将WrapResult/DontWrapResult属性添加到操作和控制器,以实现更精细的控制。您可以从启动配置(使用configuration.Modules.AbpWebApi()…)更改此默认行为。有关结果包装的更多信息,请参见AJAX文档
包装结果 ASP.NET样板文件使用AjaxResponse对象包装动态Web API操作的返回值。有关包装的更多信息,请参阅ajax文档。您可以启用/禁用每个方法或每个应用程序服务的包装。请参见此示例应用程序服务:
public interface ITestAppService : IApplicationService
{
[DontWrapResult]
DoItOutput DoIt(DoItInput input);
}
最后,您可以编写自己的ResultRapperHandler
公共类CustomResultRapperHandler:ResultRapperHandler,ITransientDependency
{
//...
受保护的覆盖无效WrapRequestId(HttpRequestMessage请求、HttpResponseMessage响应)
{
//...
基本需求(请求、响应);
}
}
如果要禁用显示特定AJAX调用的消息,请在abp.AJAX选项中添加abpHandleError:false
或者,您可以禁用框架异常包装器的默认行为
public class PeopleController : AbpController
{
[HttpPost]
[WrapResult(WrapOnSuccess = false, WrapOnError = false)]
public JsonResult SavePerson(SavePersonModel person)
{
//TODO: save new person to database and return new person's id
return Json(new {PersonId = 42});
}
}
另一件事是;您可以通过以下配置向客户端发送异常详细信息
...
using Abp.Web.Configuration;
...
public override void PreInitialize()
{
Configuration.Modules.AbpWebCommon().SendAllExceptionsToClients = true;
}
...
结果包装和异常处理: 如果操作已成功执行,ASP.NET样板文件默认情况下不会包装Web API操作。但是,它处理并包装异常。您可以将WrapResult/DontWrapResult属性添加到操作和控制器,以实现更精细的控制。您可以从启动配置(使用configuration.Modules.AbpWebApi()…)更改此默认行为。有关结果包装的更多信息,请参见AJAX文档
包装结果 ASP.NET样板文件使用AjaxResponse对象包装动态Web API操作的返回值。有关包装的更多信息,请参阅ajax文档。您可以启用/禁用每个方法或每个应用程序服务的包装。请参见此示例应用程序服务:
public interface ITestAppService : IApplicationService
{
[DontWrapResult]
DoItOutput DoIt(DoItInput input);
}
最后,您可以编写自己的ResultRapperHandler
公共类CustomResultRapperHandler:ResultRapperHandler,ITransientDependency
{
//...
受保护的覆盖无效WrapRequestId(HttpRequestMessage请求、HttpResponseMessage响应)
{
//...
基本需求(请求、响应);
}
}
感谢阿尔珀的详细回答。我只想添加另一个属性,即异常代码(生成的UID)并将其返回给用户。然后将其记录在日志服务中,以发现其简单性。不写我自己的包装就可以了吗?对不起,不行!编写您自己的实现。感谢Alper提供的详细答案。我只想添加另一个属性,即异常代码(生成的UID)并将其返回给用户。然后将其记录在日志服务中,以发现其简单性。不写我自己的包装就可以了吗?对不起,不行!编写自己的实现。