2013-11-21 98 views
0

有一个长期存在的问题与ASP.NET MVC不正确地处理URL路径,如果有正斜杠,即使他们是URL编码的参数。ASP.NET - 无法找到视图

举例:
在默认安装,(根据需要调整端口)去这个网址

http://localhost:11541/Token/Create? 
callback=http%3a%2f%2flocalhost%3a11491%2ftoken%2fcreatetoken%2fAddPrivateValues 

注意,控制器是“令牌”和“创建”是要调用的方法。这是我得到的错误:

The view 'http://localhost:11491/token/createtoken/AddPrivateValues' or 
its master was not found or no view engine supports the searched 
locations. The following locations were searched: 
~/Views/Token/http://localhost:11491/token/createtoken/AddPrivateValues.aspx 
~/Views/Token/http://localhost:11491/token/createtoken/AddPrivateValues.ascx 
~/Views/Shared/http://localhost:11491/token/createtoken/AddPrivateValues.aspx 
~/Views/Shared/http://localhost:11491/token/createtoken/AddPrivateValues.ascx 

请注意,它调用了“CreateToken/AddPrivateValues”。这是错误的。它应该调用Token.Create。

这个问题出现自2009年以来已经被打破(按照现有S.O.研究),所以我不会屏住了呼吸。我只需要解决此问题并将其移至Azure。

我尝试添加到我的控制器{* ID}路线,但是,这并不工作,因为有很多斜杠。该only way to fix this is to disable this parsing in the machine.config(web.config文件无效)

问题

如何设置Windows Azure中这个属性,而不使用RDP以便在Web.config文件的权限为安全和锁定,因为他们在我尝试做这件事之前?

+0

您使用Azure网站或虚拟机的结果? –

+0

@ DanielA.White我还没有决定哪种方法我会长期,但最初的网站。 – LamonteCristo

+0

您无法更改这些machine.config。 –

回答

0

我无法复制上MVC 4项目的清洁部署您的问题。你如何试图将回调参数传递回你的视图(如果有的话)。如果您正在使用

return View(callback); 

这就是它失败的原因,因为它将字符串变量解释为视图名称。尝试将其存储在视图包中或将其封装在视图模型中。作为一个方面说明,我知道传递参数的斜线似乎适用于所有MVC版本,因为在帐户/登录控制器操作中,您可以毫无问题地发送returnUrl。

下面是我的配置,让我知道,如果我从你的任何地方设置偏离。

路由配置

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
    //Changed default route to allow me to only have to create one controller 
    routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new { controller = "Token", action = "Index", id = UrlParameter.Optional } 
    ); 
} 

令牌控制器

public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult Create(string callback) 
    { 
     @ViewBag.Item = callback; 
     return View(); 
    } 

Create.cshtml

@{ 
    ViewBag.Title = "Create"; 
} 

<h2>Create</h2> 

@ViewBag.Item 

我的URL:http://localhost:11319/Token/Create?callback=http%3a%2f%2flocalhost%3a11491%2ftoken%2fcreatetoken%2fAddPrivateValues

我创建页

<h2>Create</h2> 

http://localhost:11491/token/createtoken/AddPrivateValues 


    <script src="/Scripts/jquery-1.8.2.js"></script> 
+0

非常好,我犯了一个愚蠢的错误,并排除了错误的事情。谢谢 – LamonteCristo