我有一个MVC应用程序,它具有以下默认路由映射:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new {controller = "Startup", action = "Index", id = UrlParameter.Optional }
);
只要我将此站点部署到IIS服务器的根目录(c:\ inetpub \ wwwroot)并在IIS中创建新的网站,一切正常。
但是,如果我在wwwroot文件夹结构中创建目录,在那里部署相同的文件而不是创建网站,我在DefaultWebSite下面创建一个Application并将其指向文件所在的子文件夹(c:\ inetpub \ wwwroot的\所有MyApplication);当我启动以前配置为网站的WebApplication时,我收到错误“ 您要查找的资源已被删除,其名称已更改,或暂时不可用。 “
请求的网址:http://localhost:80/Account/Authorize?client_id=web&response_type=token&state=
物理路径:C:\ inetpub \ wwwroot \ Account \ Authorize
所以看来我的路由需要调整以反映应用程序的位置位于wwwroot下的子目录中,而不是wwwroot所在的位置。
应该采取哪些措施来确保MVC网络“应用程序”在父网站下正常运行?
=================================
在考虑发布评论之后,我发现我的问题的一些细节可能值得一提。
我的应用程序正在重定向到我默认发布的请求的URL,我没有这样做。换句话说,如果我打开IIS,右键单击DefaultWebSite下的我的应用程序并选择browse;我收到了错误的网址。我永远不会记得在ASP.NET应用程序中出现这个问题,这对我来说是“路由”问题
如果我更改了网址,以便应用程序名称位于帐户/授权路径之前,我会再次重定向到http://localhost/#access_token=& token_type = bearer& expires_in = 1209600并收到一个空白内容页面,上面写着“ “开始执行”在右上角。页面标题说CORS Detection Script。建议我,我的应用程序可能驻留在默认网站的不同域中???但是需要澄清一点。
如果我再次在使用应用程序名称登陆CORS检测脚本页面的URL之前,我的页面会按照我的预期成功加载
=============================================== =
所以,我相信我的应用程序中可能需要进行一些调整(可能在路由配置中),以补偿默认生成的错误URL。
因为如果我将应用程序设置为包含所有内容而不是子目录的网站,那么一切都有效。
肯定有人在此之前见过这个
答案 0 :(得分:1)
当您在网站的子文件夹中创建应用程序时,实际上只会更改运行应用程序的进程的范围(w3p.exe)。您仍然需要将应用程序名称放在URL中,如下所示: