C# 在NancyFX的RequestStartup中检查路由是否有效
我的wpf应用程序中有一个自托管RESTAPI,它是使用NancyFX构建的。该应用程序用于更新固件并在使用USB电缆连接到计算机的不同消费品上运行诊断 产品必须连接到计算机才能使用API。因此,我认为在WindsorNancyBootstrapper中重写的RequestStartup()方法中执行此检查是明智的,这意味着可以在一个位置而不是在每个模块中执行此检查。它像预期的那样工作。如果产品未连接,则任何模块都不会处理该请求 但在以下情况下,这会导致不必要的副作用:C# 在NancyFX的RequestStartup中检查路由是否有效,c#,.net,rest,nancy,self-hosting,C#,.net,Rest,Nancy,Self Hosting,我的wpf应用程序中有一个自托管RESTAPI,它是使用NancyFX构建的。该应用程序用于更新固件并在使用USB电缆连接到计算机的不同消费品上运行诊断 产品必须连接到计算机才能使用API。因此,我认为在WindsorNancyBootstrapper中重写的RequestStartup()方法中执行此检查是明智的,这意味着可以在一个位置而不是在每个模块中执行此检查。它像预期的那样工作。如果产品未连接,则任何模块都不会处理该请求 但在以下情况下,这会导致不必要的副作用: 产品未连接到计算机 路
- 产品未连接到计算机
- 路径无效
- 如果url无效,无论是否有连接的设备,始终返回404“坏url”响应,而不涉及任何模块
- 如果url有效,但没有连接的设备,则返回400“未连接的设备”,而不涉及任何模块
protected override void RequestStartup(IWindsorContainer container, IPipelines pipelines, NancyContext context)
{
pipelines.BeforeRequest.AddItemToEndOfPipeline(ctx =>
{
// TODO: Here I would like to check if the url is valid in order to be able to return a 404 "bad url" response
if (!_hasConnectedDevice)
{
// ResponseBase is my base class for all my JSON responses
var response = new ResponseBase(ctx.Request.Url, Messages.DeviceNotConnected);
return new JsonResponse(response, new DefaultJsonSerializer())
{
StatusCode = HttpStatusCode.NotFound
};
}
if (!_deviceIsReady)
{
var response = new ResponseBase(ctx.Request.Url, Messages.DeviceNotReady);
return new JsonResponse(response, new DefaultJsonSerializer())
{
StatusCode = HttpStatusCode.BadRequest
};
}
return null;
});
// Catch all unhandled exceptions here.
pipelines.OnError += (ctx, ex) =>
{
var response = new ResponseBase(ctx.Request.Url, ex.Message);
return new JsonResponse(response, new DefaultJsonSerializer())
{
StatusCode = HttpStatusCode.InternalServerError
};
};
}
我能想到的最好的方法是做一些类似于安全性的事情,在Inacymodule上创建一个扩展方法,在管道上添加一些东西,检查设备是否已插入并准备就绪,如果未插入,则返回相关的状态码,否则只返回null,然后,在每个模块中,您只希望使用添加的USB设备:
这个。requiressbings();//或者不管你想叫它什么:)我能想到的最好的方法是做一些类似于我们对安全性所做的事情,在Inacymodule上创建一个扩展方法,在管道上添加一些东西,检查设备是否已插入并准备就绪,如果未插入,则返回相关的状态代码,否则,它只返回null,然后在每个模块中,您只希望使用您添加的USB设备:
这个。requiressbings();//或者您想叫它什么:)是的,我可以在每个模块中检查连接的设备,但如果可能的话,我宁愿在一个中心位置执行此检查。:)我知道,但我不认为有任何方法可以做到这一点,同时检查路由是否有效,因此我建议:)是的,我可以检查每个模块中是否有连接的设备,但如果可能,我宁愿在一个中心位置执行此检查。:)我知道,但我不认为有任何方法可以做到这一点,同时还要检查路线是否有效,因此我建议:)