Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.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# 在现有ASP.NET MVC 5项目中使用WebAPI 2.2_C#_Asp.net Web Api_Asp.net Mvc 5_Asp.net Web Api2_Attributerouting - Fatal编程技术网

C# 在现有ASP.NET MVC 5项目中使用WebAPI 2.2

C# 在现有ASP.NET MVC 5项目中使用WebAPI 2.2,c#,asp.net-web-api,asp.net-mvc-5,asp.net-web-api2,attributerouting,C#,Asp.net Web Api,Asp.net Mvc 5,Asp.net Web Api2,Attributerouting,我在现有的MVC5项目中使用WebAPI 2.2和属性路由。我打算将整个网站迁移到WebAPI,但这需要一些时间。我让一切正常,但我担心我可能做错了什么 如果我简单地删除WebApiConfig.Register()中通常提供的HttpConfiguration参数,并在WebApiConfig.Register()方法中简单地调用GlobalConfiguration.configuration(x=>x.maphttpAttribute()),那么WebAPI端点将以所需的结果响应 这就是

我在现有的MVC5项目中使用WebAPI 2.2和属性路由。我打算将整个网站迁移到WebAPI,但这需要一些时间。我让一切正常,但我担心我可能做错了什么

如果我简单地删除
WebApiConfig.Register()
中通常提供的HttpConfiguration参数,并在
WebApiConfig.Register()
方法中简单地调用
GlobalConfiguration.configuration(x=>x.maphttpAttribute())
,那么WebAPI端点将以所需的结果响应

这就是我的结局:

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        WebApiConfig.Register();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }
}


class WebApiConfig
{
    public static void Register()
    {
        GlobalConfiguration.Configure(x => x.MapHttpAttributeRoutes());
    }
}

这种方法有什么问题吗?

因此,当WebAPI 2.2添加到现有项目中时,有两种方法可以解决出现的配置问题。我正在做这两个修复,当我阅读代码时,我就明白了

以下是:

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        WebApiConfig.Register();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }
}


class WebApiConfig
{
    public static void Register()
    {
        GlobalConfiguration.Configure(x => x.MapHttpAttributeRoutes());
    }
}
public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        //WebApiConfig.Register();
        GlobalConfiguration.Configure(WebApiConfig.Register);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }
}

class WebApiConfig
{
    public static void Register(HttpConfiguration configuration)
    {
        configuration.MapHttpAttributeRoutes();
    }
}
实际上与执行以下操作相同:

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        WebApiConfig.Register();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }
}


class WebApiConfig
{
    public static void Register()
    {
        GlobalConfiguration.Configure(x => x.MapHttpAttributeRoutes());
    }
}
public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        //WebApiConfig.Register();
        GlobalConfiguration.Configure(WebApiConfig.Register);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }
}

class WebApiConfig
{
    public static void Register(HttpConfiguration configuration)
    {
        configuration.MapHttpAttributeRoutes();
    }
}
似乎我只是在经历一次精神上的失误:)

显然,
GlobalConfiguration.Configure(x=>x.maphttpAttribute路由())
基本上与
GlobalConfiguration.configuration(WebApiConfig.Register)
做的事情相同

从逻辑上讲,这些应该产生相同的结果。以下是System.Web.Http命名空间中用于全局配置的Microsoft代码:

/// <summary>
/// Provides a global <see cref="T:System.Web.Http.HttpConfiguration"/> for ASP.NET applications.
/// </summary>
public static class GlobalConfiguration
{
    private static Lazy<HttpConfiguration> _configuration = CreateConfiguration();

    ///... code excluded for brevity

    /// <summary>
    /// Gets the global <see cref="T:System.Web.Http.HttpConfiguration"/>.
    /// </summary>
    public static HttpConfiguration Configuration
    {
        get { return _configuration.Value; }
    }

    /// <summary>
    /// Performs configuration for <see cref="GlobalConfiguration.Configuration"/> and ensures that it is
    /// initialized.
    /// </summary>
    /// <param name="configurationCallback">The callback that will perform the configuration.</param>
    public static void Configure(Action<HttpConfiguration> configurationCallback)
    {
        if (configurationCallback == null)
        {
            throw new ArgumentNullException("configurationCallback");
        }

        configurationCallback.Invoke(Configuration);
        Configuration.EnsureInitialized();
    }

    private static Lazy<HttpConfiguration> CreateConfiguration()
    {
        return new Lazy<HttpConfiguration>(() =>
        {
            HttpConfiguration config = new HttpConfiguration(new HostedHttpRouteCollection(RouteTable.Routes));
            ServicesContainer services = config.Services;
            Contract.Assert(services != null);
            services.Replace(typeof(IAssembliesResolver), new WebHostAssembliesResolver());
            services.Replace(typeof(IHttpControllerTypeResolver), new WebHostHttpControllerTypeResolver());
            services.Replace(typeof(IHostBufferPolicySelector), new WebHostBufferPolicySelector());
            services.Replace(typeof(IExceptionHandler),
                new WebHostExceptionHandler(services.GetExceptionHandler()));
            return config;
        });
    }

    ///... code excluded for brevity
}
//
///为ASP.NET应用程序提供全局配置。
/// 
公共静态类全局配置
{
私有静态惰性配置=CreateConfiguration();
///…为简洁起见,代码被排除在外
/// 
///获取全局值。
/// 
公共静态HttpConfiguration
{
获取{return\u configuration.Value;}
}
/// 
///执行的配置,并确保
///初始化。
/// 
///将执行配置的回调。
公共静态无效配置(操作配置回调)
{
if(configurationCallback==null)
{
抛出新ArgumentNullException(“configurationCallback”);
}
configurationCallback.Invoke(配置);
Configuration.ensureIninitialized();
}
私有静态惰性CreateConfiguration()
{
返回新的延迟(()=>
{
HttpConfiguration配置=新的HttpConfiguration(新的HostedHttpRouteCollection(RouteTable.Routes));
ServicesContainerServices=config.services;
Assert(services!=null);
替换(typeof(iasembliesresolver),新的webhostassembliesrolver());
替换(typeof(IHttpControllerTypeResolver),新的WebHostHttpControllerTypeResolver());
替换(typeof(IHostBufferPolicySelector),新的WebHostBufferPolicySelector());
服务。替换(类型为(IEExceptionHandler),
新的WebHostExceptionHandler(services.GetExceptionHandler());
返回配置;
});
}
///…为简洁起见,代码被排除在外
}