MVC 3的Url Helper提供了错误的URL

13 浏览
0 Comments

MVC 3的Url Helper提供了错误的URL

我正在为公司内部网站开发一个MVC 3应用程序,但是URL辅助程序有时无法生成正确的URL,我遇到了一些问题。该应用程序是通过一个由我们的IT部门控制的访问管理应用程序进行访问的,该应用程序基本上提供了一个标准化的URL,使用户不需要了解服务器的任何信息。例如,要直接在服务器上访问应用程序,我将访问:

http://philsserver/App

通过访问管理器,我将使用IT部门提供的URL:

http://secureintranet/PHILSAPP/App/

我在我的应用程序中的几个地方使用了MVC URL辅助程序 - 问题是有时候会漏掉“PHILSAPP”部分 - 当我在“”链接中使用它时,它可以工作,但是当我在其他地方使用它时,它不行。

例如,代码:


正确地创建了链接:

下面的代码:

@Html.TextBox("lastName", ViewBag.LastName as string, new { @class = "input-mini", @autocomplete = Url.Action("QuickSearch", "Employee") })

生成的是:


请注意,此URL不包含“PHILSAPP”部分。如果我在javascript或其他任何地方除了“”标签使用URL辅助程序,也会发生这种情况。有人知道为什么会出现这种情况吗?据我所知,Url.Action的这两个调用几乎是相同的,所以我无法弄清楚为什么会发生这种情况。如果这个问题已经有人回答过,我很抱歉,但我没有找到任何关于有类似问题的人的信息。提前感谢任何帮助。

更新:

根据请求,我的路由如下:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional });

更新2:使用的访问管理器是Tivoli Identity Manager,如果有人有任何线索,请告诉我。

0
0 Comments

MVC 3 Url Helper给出错误的URL的问题是由于Url.Action方法始终生成URL为/App/...,但访问管理应用程序会识别特定标签(如

等),并在开头添加/PHILSAPP。解决方法是编写一些扩展方法来生成绝对URL而不是相对URL,其中包括在web.config文件中指定的主机名,包括/PHILSAPP。

扩展方法的代码如下:

namespace MvcApplicationNameSpace
{
    /// 
    /// Extension methods to the UrlHelper class for generating absolute URLs using
    /// Web.config settings
    /// 
    public static class UrlHelperExtensions
    {
        private static string BaseUrl
        {
            get
            {
                return System.Configuration.ConfigurationManager.AppSettings["BaseUrl"];
            }
        }
        /// 
        /// Generates a string for the absolute URL to an action method
        /// 
        /// 
        /// 
        public static string AbsoluteAction(this UrlHelper url)
        {
            return BaseUrl + url.Action();
        }
        /// 
        /// Generates a string for the absolute URL to an action method with the
        /// specified name
        /// 
        /// 
        /// 
        /// 
        public static string AbsoluteAction(this UrlHelper url, string actionName)
        {
            return BaseUrl + url.Action(actionName);
        }
        /// 
        /// Generates a string for the absolute URL to an action method with the
        /// specified name and route values
        /// 
        /// 
        /// 
        /// 
        /// 
        public static string AbsoluteAction(this UrlHelper url, string actionName, object routeValues)
        {
            return BaseUrl + url.Action(actionName, routeValues);
        }
        /// 
        /// Generates a string for the absolute URL to an action method with the
        /// specified name and route values
        /// 
        /// 
        /// 
        /// 
        /// 
        public static string AbsoluteAction(this UrlHelper url, string actionName, RouteValueDictionary routeValues)
        {
            return BaseUrl + url.Action(actionName, routeValues);
        }
        /// 
        /// Generates a string for the absolute URL to an action method and
        /// controller
        /// 
        /// 
        /// 
        /// 
        /// 
        public static string AbsoluteAction(this UrlHelper url, string actionName, string controllerName)
        {
            return BaseUrl + url.Action(actionName, controllerName);
        }
        /// 
        /// Generates a string for the absolute URL to an action method and
        /// controller, including route values
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public static string AbsoluteAction(this UrlHelper url, string actionName, string controllerName, object routeValues)
        {
            return BaseUrl + url.Action(actionName, controllerName, routeValues);
        }
        /// 
        /// Generates a string for the absolute URL to an action method and
        /// controller, including route values
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public static string AbsoluteAction(this UrlHelper url, string actionName, string controllerName, RouteValueDictionary routeValues)
        {
            return BaseUrl + url.Action(actionName, controllerName, routeValues);
        }
    }
}

以上就是关于MVC 3 Url Helper给出错误的URL问题的原因和解决方法的整理。

0
0 Comments

问题原因:在安全入口服务器后面,我们遇到了同样的问题。对于REST调用,我们希望在服务器端生成URL,以便在JavaScript中使用。但是它们没有包含安全入口服务器添加的子路径。因此,我们想出了一个解决方法(在布局页面中呈现):

解决方法:将href="/"替换为href="/path/",我们可以在访问REST服务时轻松地将baseUrl与相对路径连接起来。

希望对你的情况有所帮助。

0