c# - 如何强制将单个域用于 ASP.NET MVC 站点?

标签 c# asp.net .net asp.net-mvc asp.net-mvc-routing

我目前有一个 ASP .NET MVC 站点,有两个域指向它(例如 www.domainA.com 和 www.domainB.com)。我想更改所有链接以使用 www.domainA.com,即使访问了 www.domainB.com。

我所有的 url 都是由内置的 Url.Action 和 Html.ActionLink 方法生成的。

我按照 previous question 中的说明进行操作但我不能完全让它工作。

这是我的自定义路线:

public class MultipleDomainRoute : System.Web.Routing.Route
{
    public MultipleDomainRoute(string url, IRouteHandler routeHandler)
        : base(url, routeHandler)
    {
    }

    public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
    {
        VirtualPathData path = new VirtualPathData(this, "http://www.domainA.com/" + values["controller"] + "/" + values["action"]);
        return path;
    }
}

这是我的自定义路由处理程序:

class MyRouteHandler : IRouteHandler
{
    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        return new MvcHandler(requestContext);
    }
}

这是我的 RegisterRoutes 方法:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.Add(new MultipleDomainRoute("{controller}/{action}/{id}", new MyRouteHandler()));

    routes.MapRoute(
        "Default",                                              // Route name
        "{controller}/{action}/{id}",                           // URL with parameters
        new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
    );
}

该路由正在运行(即不会使我的站点崩溃)但是当我运行它时,我的 url 只是附加到 http://localhost ...例如,我得到“http://localhost:56822/http:/www.domainA.com/Home/Index”。

有谁知道为什么这不起作用?

最佳答案

如果您使用的是 IIS 7,最好在网络服务器级别实现它。

这样,正确的状态代码将在 HTTP header 中返回给浏览器,您的 MVC 应用程序可以处理自己的路由,而不必担心域名和主机名,在大多数情况下,这是网络服务器的工作。

有两种方法可以实现这一点

<强>1。通过 IIS 管理控制台

在 IIS 控制台中打开您的网站并选择 URL Rewrite 并按照以下步骤操作:

  1. 创建新规则并将匹配 URL 设置为通配符并将模式输入为您的辅助域
  2. 添加一个条件,其中 {HTTP_HOST} 等于网站的辅助域。
  3. 将“操作类型”设置为重定向,然后输入您希望重定向到的模式。在这种情况下,“http://mysite.com{R:1}”会将 IP 地址之后的所有内容映射到其等效域,因此 mysite.net/mycontent 将重定向到 mysite.com/mycontent

<强>2。在你的 web.config 中

<system.webServer>
<rewrite>
 <rules>
 <rule name="Redirect to mydomain.com" stopProcessing="true">
 <match url=".*"/>
 <conditions>
 <add input="{HTTP_HOST}" pattern="^(www.)?mydomain.net"/>
 </conditions>
 <action type="Redirect" url="http://www.mydomain.com/{R:0}"/>
 </rule>
 </rules>
 </rewrite>
</system.webServer>

这种方法将确保您的子目录被映射并且您的站点保持搜索引擎友好,并生成适当的响应代码。

关于c# - 如何强制将单个域用于 ASP.NET MVC 站点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9332599/

相关文章:

c# - 从控制台应用程序挂接到来自 ActiveX 库的事件

c# - WPF 应用程序中的多个数据网格,但一次只显示一个

android - 在 IOS 中使用框架阴影效果显示,但在 xamarin 中的 UWP 项目中则不使用

.net - PowerShell:System.Net.WebClient.DownloadFile 不会下载从 ListDirectory 收集的文件

c# - 是否可以在 C# 中的项目之间静态共享代码?

C# UWP - HttpClient 响应问题\u001...无法反序列化

asp.net - css 复选框标签选择器

jquery - ASP.NET 隐藏和显示 div

c# - CompositeWPF 是否支持多个窗口/外壳?

c# - 将 WPF 中的图像源绑定(bind)到 Url