最近公司遇到这样一个问题。公司以前使用一个SiteServer CMS开源框架来搭建网站,是以asp.net开发的,并且托管在IIS中。其中出现了一个问题,就是用ajax访问不了这个框架后台的webapi接口,报404错误。当时还以为是模块处理程序的问题,测试了多遍,还是找不出原因。况且公司运营这个网站有个好几年了,里面的文件众多,光容量就有几十个G,不可能说重构就重构吧?自己又有众多业务在身,没有那么多时间。好吧,我把这个框架的bin目录里面重要的dll文件拷贝过来,新建一个工程项目,然后发布到服务器上,专门用作webapi站点,接下来就在以前那个站点下用Rewrite重定向模块来把前端需要访问的webapi接口重定向到这个新建的webapi站点,这样可以暂时解决这个问题。
Url Rewrite Module安装程序可以去这个地址下载:https://www.iis.net/downloads/microsoft/url-rewrite
Url Rewrite Module的使用可以参考这篇文章:https://docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/using-url-rewrite-module-20
rewrite重写模块需要包含在system.webServer节点中,其配置如下图所示:
关键名词释义:
PATH_INFO:表示一个url地址的path部分;
{R:1}:这个和正则表达式的捕获一样,1代表那个被捕获的括号里面的字符串的索引;
这个配置中最关键的要属action节点的redirectType属性,如果是其他属性值,则不能重定向post方法的接口,只会重定向get方法,如果定义为Temporary值,则可以重定向post方法的接口。
后记:
接口出现404的结果,是因为缺少了Global.asax文件,补上就可以了。