Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# RequestFilter验证是否依赖于客户端?_C#_.net_<img Src="//i.stack.imgur.com/WM7S8.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">servicestack_Applicationhost_Servicestack Bsd - Fatal编程技术网 servicestack,applicationhost,servicestack-bsd,C#,.net,servicestack,Applicationhost,Servicestack Bsd" /> servicestack,applicationhost,servicestack-bsd,C#,.net,servicestack,Applicationhost,Servicestack Bsd" />

C# RequestFilter验证是否依赖于客户端?

C# RequestFilter验证是否依赖于客户端?,c#,.net,servicestack,applicationhost,servicestack-bsd,C#,.net,servicestack,Applicationhost,Servicestack Bsd,当通过AppHostBase.ResolveService时,是否应该触发请求筛选器验证(例如) 到目前为止,我只在使用时成功地收到了对C#应用程序的正确错误响应(特别是在本例中)。您是对的。如果尝试使用AppHostBase.ResolveService,它不会执行任何已注册的请求筛选器。本质上,它只解析来自AppHost依赖性容器的服务,而只返回服务实例。因此您的验证器不会被触发 ServiceStack v4: 正如@mythz所指出的,您可以使用HostContext的MQ入口点API来

当通过AppHostBase.ResolveService时,是否应该触发请求筛选器验证(例如)


到目前为止,我只在使用时成功地收到了对C#应用程序的正确错误响应(特别是在本例中)。

您是对的。如果尝试使用
AppHostBase.ResolveService
,它不会执行任何已注册的请求筛选器。本质上,它只解析来自AppHost依赖性容器的服务,而只返回服务实例。因此您的验证器不会被触发

ServiceStack v4: 正如@mythz所指出的,您可以使用
HostContext
的MQ入口点API来执行带有MQ请求过滤器的调用,从而运行验证。为此:

HostContext.ServiceController.ExecuteMessage(new Message<T>(requestDto), httpReq);
ServiceStack v3:
GetAppHost().Config.ServiceManager.ServiceController.ExecuteMessage(新消息(requestDto),httpReq);

您也可以仅使用请求DTO调用服务:
HostContext.ServiceController.Execute(requestDto,httpReq)
,这仍然不会执行全局请求筛选器,而是使用MQ入口点API:
HostContext.ServiceController.ExecuteMessage(新消息(requestDto),httpReq)
执行全局MQ请求过滤器并执行流畅的验证。@mythz太好了。我将开始正确地探索
HostContext
源代码;现在你已经两次指出了我不知道的伟大功能。:)您作为
httpReq
传递什么?@JeremySmith如果您不传递
httpReq
我相信它将解析原始请求的上下文。相关代码。因此,只需尝试传递DTO,我已经确认它确实会按需要触发验证。奇怪的是,它只适用于
POST
ANY
…抛出
在服务中找不到名为POST(…)或ANY(…)的方法…
适用于任何其他方法…虽然这样做有效,但有点笨拙。我可能会完全避免请求过滤器验证,而只是在服务方法中执行验证。谢谢你透露了这个金块!今天下午我将进行验证。
AppHostBase
上受保护的IServiceController服务控制器…无法确定如何从MVC控制器访问此服务。我的计算机上有整个服务器,无法找到
HostContext.ServiceController
、扩展或其他
ServiceStack.Common.HostContext
Jeremy我已经更新了答案,加入了v3方法,很抱歉,我没有意识到您正在使用v3,并提供了v4的说明。希望这有帮助。
HostContext.ServiceController.Execute(requestDto, httpReq)
GetAppHost().Config.ServiceManager.ServiceController.ExecuteMessage(new Message<T>(requestDto), httpReq);