我使用南希創建一個web api。我有一個從用戶傳入進行身份驗證的已簽名令牌。此認證在我自己的引導程序中的RequestStartup方法中完成。現在在某些情況下,例如當我無法識別簽名的令牌時,我想只能拋出一個異常,並讓它在南希的OnError hanhdler中處理。但是在RequestStartup之前引發的異常未被捕獲。該請求會生成500錯誤,我想用我自己的錯誤信息返回其他內容。南希在RequestStartup異常
我有一個明顯的例子,我拋出一個異常,但也有在GetIdentity()方法拋出異常的可能性。
我正在尋找如何處理這個任何輸入。
protected override void RequestStartup(TinyIoCContainer container, IPipelines pipelines, NancyContext context)
{
base.RequestStartup(container, pipelines, context);
pipelines.OnError.AddItemToStartOfPipeline((ctx, exception) =>
container.Resolve<IErrorHandler>().HandleException(ctx, exception));
var identity = container.Resolve<IAuthenticationController>().GetIdentity();
var configuration = new StatelessAuthenticationConfiguration(_ => identity);
StatelessAuthentication.Enable(pipelines, configuration);
var logManager = new LogManager(context);
pipelines.AfterRequest.AddItemToEndOfPipeline(_ => logManager.Log());
try
{
X509Certificate2 clientCert = context.Request.ClientCertificate as X509Certificate2;
container.Resolve<ICertificateValidator>().Validate(clientCert);
}
catch (Exception ex)
{
throw new MklServerAuthenticationException(ErrorCodes.WrongOrNonexistingCertificate, ex);
}
}
或者說,上述實現了BeforeRequest鉤子並在那裏做你的東西。 – TOMTEFAR