gpt4 book ai didi

asp.net-mvc - MVC 3 Url Helper 提供不正确的 URL

转载 作者:行者123 更新时间:2023-12-03 22:35:02 27 4
gpt4 key购买 nike

我正在为企业内部网站开发一个 MVC 3 应用程序,我遇到了 URL 帮助器的一些问题,有时无法生成正确的 URL。该应用程序通过我们 IT 部门控制的访问管理器应用程序访问,该应用程序基本上提供标准化的 URL,因此用户不需要知道有关服务器的任何信息。例如,要直接在服务器上访问应用程序,我会访问:

http://philsserver/App

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

http://secureintranet/PHILSAPP/App/

我在我的应用程序中的几个地方使用了 MVC URL 助手 - 问题是有时“PHILSAPP”部分被遗漏了 - 当我在“<a>”链接中使用它时,它有效,但是当我在其他地方使用它,它不会。

例如代码:

<a href="@Url.Action("Index", "FormsAndTemplates")">

正确创建链接为:

<a href="/PHILSAPP/App/FormsAndTemplates"> .

以下代码:

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

产生:

<input autocomplete="/App/Employee/QuickSearch" class="input-mini" id="lastName" name="lastName" type="text" value="" />

请注意,此 URL 不包含“PHILSAPP”部分。如果我在 javascript 中使用 URL 帮助程序,或者在“<a>”标签以外的任何地方使用,也会发生这种情况。有谁知道为什么会这样?据我所知,对 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,如果它给任何人任何线索的话。

最佳答案

正如 nemesv 上面指出的,答案是 Url.Action方法始终将 URL 生成为/App/... 但访问管理器应用程序会识别某些标记(例如 <a href="/App/..."><form action="/App/..."> 等)并将/PHILSAPP 添加到开头。我正在探索的解决方案是为 UrlHelper 编写一些扩展方法。和 HtmlHelper生成绝对 URL 而不是相对 URL,其中包括/PHILSAPP 的主机名将在 web.config 文件中指定。如果有人还有解决此问题的任何其他建议,我会很高兴听到他们的意见,但除此之外,我对使用它作为解决方法感到满意。

开始的一些样板代码:

namespace MvcApplicationNameSpace
{
/// <summary>
/// Extension methods to the UrlHelper class for generating absolute URLs using
/// Web.config settings
/// </summary>
public static class UrlHelperExtensions
{
private static string BaseUrl
{
get
{
return System.Configuration.ConfigurationManager.AppSettings["BaseUrl"];
}
}

/// <summary>
/// Generates a string for the absolute URL to an action method
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static string AbsoluteAction(this UrlHelper url)
{
return BaseUrl + url.Action();
}

/// <summary>
/// Generates a string for the absolute URL to an action method with the
/// specified name
/// </summary>
/// <param name="url"></param>
/// <param name="actionName"></param>
/// <returns></returns>
public static string AbsoluteAction(this UrlHelper url, string actionName)
{
return BaseUrl + url.Action(actionName);
}

/// <summary>
/// Generates a string for the absolute URL to an action method with the
/// specified name and route values
/// </summary>
/// <param name="url"></param>
/// <param name="actionName"></param>
/// <param name="routeValues"></param>
/// <returns></returns>
public static string AbsoluteAction(this UrlHelper url, string actionName, object routeValues)
{
return BaseUrl + url.Action(actionName, routeValues);
}

/// <summary>
/// Generates a string for the absolute URL to an action method with the
/// specified name and route values
/// </summary>
/// <param name="url"></param>
/// <param name="actionName"></param>
/// <param name="routeValues"></param>
/// <returns></returns>
public static string AbsoluteAction(this UrlHelper url, string actionName, RouteValueDictionary routeValues)
{
return BaseUrl + url.Action(actionName, routeValues);
}

/// <summary>
/// Generates a string for the absolute URL to an action method and
/// controller
/// </summary>
/// <param name="url"></param>
/// <param name="actionName"></param>
/// <param name="controllerName"></param>
/// <returns></returns>
public static string AbsoluteAction(this UrlHelper url, string actionName, string controllerName)
{
return BaseUrl + url.Action(actionName, controllerName);
}

/// <summary>
/// Generates a string for the absolute URL to an action method and
/// controller, including route values
/// </summary>
/// <param name="url"></param>
/// <param name="actionName"></param>
/// <param name="controllerName"></param>
/// <param name="routeValues"></param>
/// <returns></returns>
public static string AbsoluteAction(this UrlHelper url, string actionName, string controllerName, object routeValues)
{
return BaseUrl + url.Action(actionName, controllerName, routeValues);
}

/// <summary>
/// Generates a string for the absolute URL to an action method and
/// controller, including route values
/// </summary>
/// <param name="url"></param>
/// <param name="actionName"></param>
/// <param name="controllerName"></param>
/// <param name="routeValues"></param>
/// <returns></returns>
public static string AbsoluteAction(this UrlHelper url, string actionName, string controllerName, RouteValueDictionary routeValues)
{
return BaseUrl + url.Action(actionName, controllerName, routeValues);
}
}
}

关于asp.net-mvc - MVC 3 Url Helper 提供不正确的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14146295/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com