加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 在ASP.NET MVC应用程序下将ASP.NET Web API应用

发布时间:2020-12-16 07:19:47 所属栏目:asp.Net 来源:网络整理
导读:由于各种工程需求,我需要在现有应用程序(名为FooApp)的同一Application域中开发一个新的ASP.NET Web API应用程序(名为BarApp). 我想将ASP.NET Web API应用程序(BarApp)配置为IIS 8.5上现有ASP.NET MVC应用程序(FooApp)下的虚拟目录.尽管许多帖子都谈到了如何
由于各种工程需求,我需要在现有应用程序(名为FooApp)的同一Application域中开发一个新的ASP.NET Web API应用程序(名为BarApp).

我想将ASP.NET Web API应用程序(BarApp)配置为IIS 8.5上现有ASP.NET MVC应用程序(FooApp)下的虚拟目录.尽管许多帖子都谈到了如何配置虚拟目录,但它们都不起作用.

这是配置代码段

<site name="FooApp" id="3" serverAutoStart="true">
            <application path="/" applicationPool="FooApp">
                <virtualDirectory path="/" physicalPath="E:FooApp" />
                <virtualDirectory path="/Bar" physicalPath="E:BarApp" />
            </application>
            <bindings>
                <binding protocol="https" bindingInformation="*:34566:" sslFlags="0" />
            </bindings>
        </site>

这是网站结构:

-FooApp
|
|--Bin
|--View
|--Bar (as a virtual directory)
    |
    |--Bin
    |--View

在Foo应用程序中,我配置了路由:为Bar添加所有路径的ingore路由

--RouteConfig.cs
  namespace FooApp
  {
       public class RouteConfig
       {
          public static void RegisterRoutes(RouteCollection routes)
         {
             routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
             routes.IgnoreRoute("{*path}",new { path = @"Bar/(.*)" });

             routes.MapRoute(
                name: "Default",url: "{controller}/{action}/{id}",defaults: new { controller = "Home",action = "Index",id = UrlParameter.Optional }
             );
         }
   }
}

–WebApiConfig,保留自动生成的一个.

namespace FooApp
 {
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services
            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",routeTemplate: "api/{controller}/{id}",defaults: new { id = RouteParameter.Optional }
            );
          }
     }
}

在BarApp中,路由配置被修改为:

--RouteConfig.cs
namespace BarApp
{
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
               name: "Default",url: "Bar/{controller}/{action}/{id}",id = UrlParameter.Optional }
            );
         }
     }
}

--WebApiConfig
namespace BarApp
{
   public static class WebApiConfig
   {
       public static void Register(HttpConfiguration config)
      {
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",routeTemplate: "Bar/api/{controller}/{id}",defaults: new { id = RouteParameter.Optional }
        );
      }
   }
}

但是,上述配置不起作用,忽略路由似乎没有生效.
无法访问Bar:https://mywebsite.test.com:4433/Bar/的页面
HTTP错误403.14 – 禁止
Web服务器配置为不列出此目录的内容.

无法访问Bar的Web API:https://mywebsite.test.com:4433/Bar/api/values
HTTP错误404.0 – 未找到
您要查找的资源已被删除,名称已更改或暂时不可用.

Web API库是2.2.1

解决方法

我认为您的方法的问题是尝试在虚拟目录中托管Asp.Net应用程序.相反,您必须添加子应用程序:

然后修改根应用程序的web.config以避免配置冲突:

参考:Disable inheritance in child applications和validateIntegratedModeConfiguration and inheritInChildApplications clash.

这样,您就可以在不修改任何c#代码的情况下访问您的子web api:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读