Best practice for http redirection for Windows Azure

前端 未结 2 1843
耶瑟儿~
耶瑟儿~ 2021-01-31 05:51

I have an azure website which is named:

  • http://myapp.cloudapp.net

Of-course this URL is kind of ugly so I set up a CNAME that points

相关标签:
2条回答
  • 2021-01-31 06:17

    You might want to instead use the IIS rewrite module (seems "cleaner"). Here's a blog post that shows how to do this: http://weblogs.asp.net/owscott/archive/2009/11/30/iis-url-rewrite-redirect-multiple-domain-names-to-one.aspx. (You'll just need to put the relevant markup in web.config.)

    An example rule you could use is:

        <rule name="cloudexchange" stopProcessing="true">
            <match url=".*" />
            <conditions>
                <add input="{HTTP_HOST}" pattern="cloudexchange.cloudapp.net" />
            </conditions>
            <action type="Redirect" url="http://odata.stackexchange.com/{R:0}" />
        </rule>
    
    0 讨论(0)
  • 2021-01-31 06:23

    This is what I did:

    We have a base controller class we use for all our controllers, we now override:

     protected override void OnActionExecuted(ActionExecutedContext filterContext) {
    
            var host = filterContext.HttpContext.Request.Headers["Host"];
    
            if (host != null && host.StartsWith("cloudexchange.cloudapp.net")) {
                filterContext.Result = new RedirectPermanentResult("http://odata.stackexchange.com" + filterContext.HttpContext.Request.RawUrl);
            } else
            {
                base.OnActionExecuted(filterContext);
            }
        }
    

    And added the following class:

    namespace StackExchange.DataExplorer.Helpers
    {
        public class RedirectPermanentResult : ActionResult {
    
            public RedirectPermanentResult(string url) {
                if (String.IsNullOrEmpty(url)) {
                    throw new ArgumentException("url should not be empty");
                }
    
                Url = url;
            }
    
    
            public string Url {
                get;
                private set;
            }
    
            public override void ExecuteResult(ControllerContext context) {
                if (context == null) {
                    throw new ArgumentNullException("context");
                }
                if (context.IsChildAction) {
                    throw new InvalidOperationException("You can not redirect in child actions");
                }
    
                string destinationUrl = UrlHelper.GenerateContentUrl(Url, context.HttpContext);
                context.Controller.TempData.Keep();
                context.HttpContext.Response.RedirectPermanent(destinationUrl, false /* endResponse */);
            }
    
        }
    }
    

    The reasoning is that I want a permanent redirect (not a temporary one) so the search engines correct all the bad links.

    0 讨论(0)
提交回复
热议问题