私はWeb APIを作成するためにNancyを使用しています。私は、認証するためにユーザーから渡される署名付きトークンを持っています。この認証は、自分のBootstrapperのRequestStartupメソッドで実行されます。今や、いくつかのケースでは、例えば、署名されたトークンをうまく使用できないときに、例外をスローして、それをナンシーのOnErrorハンドラで処理できるようにしたいとします。しかし、RequestStartupが呼び出される前にスローされた例外は捕捉されません。リクエストによって500のエラーが発生し、私自身のエラー情報で何か他のものを返したいと思います。RequestStartupのNancy例外
私は例外をスローする明白なケースがありますが、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