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

asp.net – 在IIS中将WebAPI添加为子/嵌套应用程序

发布时间:2020-12-16 04:06:32 所属栏目:asp.Net 来源:网络整理
导读:重新创建此问题的步骤: 在IIS内部创建一个新的.net 4网站(此处称为父网站). 将测试图像放在本网站的文件夹中,然后观察即可 在浏览器中成功申请 在指向WebAPI 2项目的父项下添加新的虚拟目录或应用程序 尝试使用www.path-to-parent-site.com/api/something/o
重新创建此问题的步骤:

>在IIS内部创建一个新的.net 4网站(此处称为父网站).
将测试图像放在本网站的文件夹中,然后观察即可
在浏览器中成功申请
>在指向WebAPI 2项目的父项下添加新的虚拟目录或应用程序
>尝试使用www.path-to-parent-site.com/api/something/or/other在浏览器中访问API

我收到以下错误:

System.Web.Routing.UrlRoutingModule does not implement IHttpHandlerFactory or IHttpHandler.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Configuration.ConfigurationErrorsException: System.Web.Routing.UrlRoutingModule does not implement IHttpHandlerFactory or IHttpHandler.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:


[ConfigurationErrorsException: System.Web.Routing.UrlRoutingModule does not implement IHttpHandlerFactory or IHttpHandler.]
   System.Web.Configuration.HandlerFactoryCache.GetHandlerType(String type) +12328272
   System.Web.Configuration.HandlerFactoryCache..ctor(String type) +27
   System.Web.HttpApplication.GetFactory(String type) +94
   System.Web.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +375
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean& completedSynchronously) +288


Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.34209

我能做些什么才能让它发挥作用?我可以找到关于这个特定问题的非常少的相关信息,对于那些看过这个错

注意:如果我将WebAPI 2项目添加为IIS中的新网站,它可以很好地工作;它只有在嵌套为子(虚拟目录或应用程序具有相同问题)时才会发生这种情况.

谢谢

解决方法

WebApi不应该托管在虚拟目录上,如果您想这样做,您需要使路由模式动态化并从虚拟目录加载第一部分.
var virtualDirectory = request.ApplicationPath;
routes.MapHttpRoute(
    name: "API Default",routeTemplate: virtualDirectory + "/api/{controller}/{id}",defaults: new {
        id = RouteParameter.Optional
    }
);

(编辑:李大同)

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

    推荐文章
      热点阅读