我已经开发了一个ASP MVC 5网站,其路线如下:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{language}",
defaults: new
{
controller = "Member",
action = "Index",
language = UrlParameter.Optional
});
}
我只有一个控制器,成员,并且所有东西都在我的本地开发机器上的IISExpress上运行。但是当我尝试在我的开发服务器上部署和访问该站点时,我收到404错误。我传递给它的URL与我在开发机器上使用的URL相同,但似乎路由没有按预期工作。这是一个示例网址:
http://myserver:8080/Member/GetCertificate/en-US?mn=MjMzOTA3MDc4MDA=&gn=NjcwNzkz
这是在我的应用程序上注册的唯一路由,我尝试在IIS上注册通配符脚本,以及使用以下条目编辑我的Web配置:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<remove name="UrlRoutingModule-4.0"/>
<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition=""/>
</modules>
</system.webServer>
开发服务器正在运行IIS 7.5。我试图从我的开发机器远程访问该页面以及从Web服务器本地访问该页面,没有运气。以下是动作方法的参考内容:
[HttpGet]
public FileResult GetCertificate(string language, string mn, string gn)
{
var member = new Member()
{
MemberNumber = Encoding.Default.GetString(
Convert.FromBase64String(mn)),
GroupNumber = Encoding.Default.GetString(
Convert.FromBase64String(gn)),
Language = language
};
var certificate = this.certificateRepository
.GetCertificateDocument(member);
return this.File(certificate, "application/pdf");
}
我继续调试它,我发现问题似乎是它将操作识别为控制器,所以如果我使用以下URL,它就可以工作:
http://myserver:8080/Member/Member/GetCertificate/en-US?mn=MjMzODU1NjE5MDE=&gn=NzkxMjgz
但我最终重复了控制器名称,这使得URL不那么易读。不管怎么说呢?也许我错过了什么?
答案 0 :(得分:0)
问题是我的IIS中的应用程序与我的控制器名称冲突。我的IIS中的结构如下:
我的MVC应用程序中的控制器也称为MemberController。这引起了混乱,因为当我实际引用应用程序本身时,我以为我正在引用控制器。因此,为了便于阅读,我将IIS中的应用程序重命名为MemberApp,最终的URL如下所示:
http://myserver:8080/MemberApp/Member/GetCertificate/en-US?mn=MjMzODU1NjE5MDE=&gn=NzkxMjgz