मैं Owin स्व होस्टिंग और WebAPI का उपयोग कर सरल सर्वर लिखा है:ओविन में डिफ़ॉल्ट अनचाहे अपवाद आउटपुट को ओवरराइड कैसे करें?
namespace OwinSelfHostingTest
{
using System.Threading;
using System.Web.Http;
using Microsoft.Owin.Hosting;
using Owin;
public class Startup
{
public void Configuration(IAppBuilder builder)
{
var config = new HttpConfiguration();
config.Routes.MapHttpRoute(
"Default",
"{controller}/{id}",
new { id = RouteParameter.Optional }
);
builder.UseWebApi(config);
}
}
public class Server
{
private ManualResetEvent resetEvent = new ManualResetEvent(false);
private Thread thread;
private const string ADDRESS = "http://localhost:9000/";
public void Start()
{
this.thread = new Thread(() =>
{
using (var host = WebApp.Start<Startup>(ADDRESS))
{
resetEvent.WaitOne(Timeout.Infinite, true);
}
});
thread.Start();
}
public void Stop()
{
resetEvent.Set();
}
}
}
जब नियंत्रक में अपवाद नहीं है, तो Owin इस तरह एक्सएमएल प्रतिक्रिया लौटाता:
<Error>
<Message>An error has occurred.</Message>
<ExceptionMessage>Attempted to divide by zero.</ExceptionMessage>
<ExceptionType>System.DivideByZeroException</ExceptionType>
<StackTrace>
...
</StackTrace>
</Error>
लेकिन मैं विभिन्न उत्पादन चाहते हैं - तो मैं इसे कैसे ओवरराइड कर सकता हूं?
public class CustomExceptionMiddleware : OwinMiddleware
{
public CustomExceptionMiddleware(OwinMiddleware next) : base(next)
{}
public override async Task Invoke(IOwinContext context)
{
try
{
await Next.Invoke(context);
}
catch(Exception ex)
{
// Custom stuff here
}
}
}
और स्टार्टअप पर यह हुक:
उत्पादन किस तरह आप देख रहे हैं:
तो, @ द्वारा प्रदान समाधान करने के लिए इस संशोधन के साथ युवाल-itzchakov आप अंतर्निहित अपवाद पर कब्जा करने में सक्षम हो जाएगा? – abatishchev