【发布时间】:2019-04-02 15:02:35
【问题描述】:
这是我第一次使用Filter,但它不起作用。这是一个非常简单的例子。响应头中没有添加任何内容,并且在过滤器类中没有命中断点。我希望这是一个全局过滤器。我错过了什么或做错了什么?
过滤器:
public class TestFilter : IResultFilter
{
public void OnResultExecuted(ResultExecutedContext context)
{
throw new NotImplementedException();
}
public void OnResultExecuting(ResultExecutingContext context)
{
var headerName = "OnResultExecuting";
context.HttpContext.Response.Headers.Add(
headerName, new string[] { "ResultExecutingSuccessfully" });
}
}
STARTUP.CS
public void ConfigureServices(IServiceCollection services)
{
var logger = _loggerFactory.CreateLogger<Startup>();
services.AddCors();
services.AddMvc(options =>
{
options.Filters.Add(new TestFilter());
});
}
控制器方法:
[HttpGet("", Name = "search")]
[ProducesResponseType(typeof(PagedResult<SearchViewModel>), (int)HttpStatusCode.OK)]
public async Task<IActionResult> Get()
【问题讨论】:
-
你真的不应该从过滤器中抛出
NotImplementedException。这将中断一切并阻止您获得任何有效的结果。另请注意,结果过滤器仅在 MVC 操作有正确结果时才会执行。因此,您必须验证您正在使用正常工作的 MVC 操作对其进行测试。 – 你有任何错误吗? -
@poke...您对 NotImplementedException 的评论是有效的,但现在只是一个测试。我已将此代码添加到工作应用程序中。没有错误被抛出
-
这是您添加的
ResultFilter。您确定您调用的操作返回了IActionResult? -
@haim770...是的,但是任务
。会是这样吗?我需要让它异步吗? -
@BigDaddy 如果不是
async,那么Task.Result没有被解包,因此它可能是一个问题,因为框架可能不认为它是有效的IActionResult...
标签: c# asp.net-core asp.net-core-2.0