c# – System.Web.Http.Filters.ActionFilterAttribute必须与控制器在同一个项目中?

c# – System.Web.Http.Filters.ActionFilterAttribute必须与控制器在同一个项目中?,第1张

概述我有一个System.Web.Http.ApiController派生的控制器: [LoggingFilterApi]public class BaseController : ApiController{ public IHttpActionResult Ads();} 过滤器定义如下: using System.Web.Http.Controllers;using Syste 我有一个System.Web.http.APIController派生的控制器:
[LoggingFilterapi]public class BaseController : APIController{     public IhttpActionResult Ads();}

过滤器定义如下:

using System.Web.http.Controllers;using System.Web.http.Filters;namespace pecom.Common.Filters{    public class LoggingFilterapiAttribute : ActionFilterattribute    {        public overrIDe voID OnActionExecuting(httpActionContext ctx)        {            var msg = ctx.ActionDescriptor.ControllerDescriptor.ControllerType.name + "." + ctx.ActionDescriptor.Actionname +                "(" + ctx.Request.RequestUri.ToString();            ILog logger = LogManager.GetLogger(ctx.ActionDescriptor.ControllerDescriptor.ControllerType);            logger.Info(msg);            base.OnActionExecuting(ctx);        }    }}

当LoggingFilterapiAttribute.cs是控制器的.csproj的一部分时,将按预期调用OnActionExecuting.但是,如果将LoggingFilterapiAttribute.cs移动到另一个.csproj(以便于代码重用),则不会按预期调用OnActionExecuting.奇怪的.

谁见过这个?目前我在我们的项目中复制过滤器,这有点不太理想.这是ASP.NET MVC 5.2.

干杯,皮特

解决方法 您很可能在Web API 2版本中存在不匹配.无论哪个版本的MVC,你的控制器都是Web API,所以你必须注意Web API相关的程序集.

我很确定,如果你在MVC项目和你的类库中检查System.Web.http的版本,它们会有所不同,因此发现机制无法找到你的自定义过滤器.只需通过使问题匹配来解决问题,它应该可行.

解决这个问题的一个简单方法是在类库中引用最新的Web API 2软件包(Microsoft.AspNet.WebAPI.Core),并升级MVC项目中的相同软件包以使它们匹配(或者通过搞乱程序集重定向如果你愿意的话).例如,如果您只是将代码复制到类库中,然后使用Resharper之类的东西来解析引用,那么很可能从GAC中选择版本4.x的System.Web.http而不是版本5.x你需要的.

我尝试了你做了什么,它再现了你的同样的问题,这个程序解决了它.

总结

以上是内存溢出为你收集整理的c# – System.Web.Http.Filters.ActionFilterAttribute必须与控制器在同一个项目中?全部内容,希望文章能够帮你解决c# – System.Web.Http.Filters.ActionFilterAttribute必须与控制器在同一个项目中?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1252121.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存