在.Net Framework 4.7应用程序中使用.Net标准库

时间:2019-05-21 11:30:54

标签: c# .net .net-core .net-standard-2.0 asp-net-mvc-1

我有一组使用.Net Standard 2.0开发的类库。这些类库之一实现了IAuthorizationFilter接口,该接口位于Microsoft.AspNetCore.Mvc.Filters名称空间中。

public class AuthorizationFilter : IAuthorizationFilter
{
    public AuthorizationFilter() {}

    public void OnAuthorization(AuthorizationFilterContext context)
    {/*Code cropped for the case of simplicity*/}
}

另一个类库的主要职责是注册依赖注入配置。

   public static class ServiceCollectionExtensions
    {
        public static IServiceCollection MyCustomConfigure(this IServiceCollection services)
        {
            //...Code cropped for the case of simplicity
            services.AddMvc(config => { config.Filters.Add(typeof(AuthorizationFilter)); });
            return services;
        }
}

除了这些.Net Standard类库之外,我还有一个使用ASP.Net MVC(。Net Framework 4.7)开发的Web应用程序项目。

我在这里有两个主要问题:

  1. 我需要将我的FilterAttribute类添加到ASP.Net MVC's过滤器列表中,这会引发异常:
  

给定的过滤器实例必须实现以下一个或多个   筛选器接口:System.Web.Mvc.IAuthorizationFilter,   System.Web.Mvc.IActionFilter,System.Web.Mvc.IResultFilter,   System.Web.Mvc.IExceptionFilter,   System.Web.Mvc.Filters.IAuthenticationFilter。

我以这种方式在ASP.Net MVC应用程序中注册了过滤器:

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        //...Code cropped for the case of simplicity
        filters.Add(typeof(AuthorizationFilter));
    }
}

显然,我不想在我的.Net Standard类库中添加对System.Web的引用,另一方面,我不知道如何解决此问题!

  1. 第二个问题是可以调用我的services.MyCustomConfigure()方法的地方。在.Net Core应用程序中,我在ConfigureServices类的Startup方法内调用了此方法,但我不知道如何在ASP.Net MVC中调用此方法!

    public class Startup
    {
        //...Code cropped for the case of simplicity
        public void ConfigureServices(IServiceCollection services)
        {
            services.MyCustomConfigure()
        }
    }
    

1 个答案:

答案 0 :(得分:4)

ASP.NET(WebForms,MVC,WebAPI)和ASP.NET Core是不同的框架,尽管它们共享相似的概念(例如过滤器属性),但是它们是不同的,并且您不能使用通过其API为ASP.NET Core编写的组件。 (Microsoft.AspNetCore.*)用于经典ASP.NET。

这意味着您将需要具有ASP.NET Core和ASP.NET MVC 5的不同实现。