jjzjj

asp.net-mvc - 带有 ASP.NET 的动态 'twitter style' url

coder 2024-03-01 原文

我希望制作一个 MVC 站点,它可以使用路由完全控制 url 结构。

具体要求是:

www.mysite.com/= 主页(主 Controller )

www.mysite.com/common/about = 内容页面(公共(public) Controller )

www.mysite.com/common/contact = 内容页面(公共(public) Controller )

www.mysite.com/john = twitter 风格的用户页面(动态 Controller )

www.mysite.com/sarah = twitter 风格的用户页面(动态 Controller )

www.mysite.com/me = 高级风格用户页面(高级 Controller )

www.mysite.com/oldpage.html = 301 重定向到新页面

www.mysite.com/oldpage.asp?id=3333 = 301 重定向到新页面

我的路线如下所示:

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Common",
            "common/{action}/{id}",
            new { controller = "common", action = "Index", id = "" }
        );

        routes.MapRoute(
            "Home",
            "",
            new { controller = "Home", action = "Index", id = "" }
            );



        routes.MapRoute(
            "Dynamic",
            "{id}",
            new { controller = "dynamic", action = "Index", id = "" }
            );

为了处理 301 rredirct,我有一个定义旧页面及其新页面 url 的数据库和一个处理查找的存储过程。代码(处理程序)如下所示:

公共(public)类 AspxCatchHandler : IHttpHandler, IRequiresSessionState {

    #region IHttpHandler Members

    public bool IsReusable
    {
        get { return true; }
    }

    public void ProcessRequest(HttpContext context)
    {
        if (context.Request.Url.AbsolutePath.Contains("aspx") && !context.Request.Url.AbsolutePath.ToLower().Contains("default.aspx"))
        {
            string strurl = context.Request.Url.PathAndQuery.ToString();
            string chrAction = "";
            string chrDest = "";

            try
            {

                DataTable dtRedirect = SqlFactory.Execute(
                    ConfigurationManager.ConnectionStrings["emptum"].ConnectionString,
                    "spGetRedirectAction",
                    new SqlParameter[] { 
                        new SqlParameter("@chrURL", strurl)
                    },
                    true);

                chrAction = dtRedirect.Rows[0]["chrAction"].ToString();
                chrDest = dtRedirect.Rows[0]["chrDest"].ToString();

                chrDest = context.Request.Url.Host.ToString() + "/" + chrDest;
                chrDest = "http://" + chrDest;


                if (string.IsNullOrEmpty(strurl))
                    context.Response.Redirect("~/");
            }
            catch
            {
                chrDest = "/";// context.Request.Url.Host.ToString();
            }

            context.Response.Clear();
            context.Response.Status = "301 Moved Permanently";
            context.Response.AddHeader("Location", chrDest);
            context.Response.End();

        }
        else
        {
            string originalPath = context.Request.Path;
            HttpContext.Current.RewritePath("/", false);
            IHttpHandler httpHandler = new MvcHttpHandler();
            httpHandler.ProcessRequest(HttpContext.Current);
            HttpContext.Current.RewritePath(originalPath, false);
        }
    }

    #endregion
}

查找用户非常简单,实际上上面的代码就是这样做的。我的问题出在动态/高级部分。

我正在尝试执行以下操作:

1) 在动态 Controller 中,查找用户名。

2) 如果用户名在用户列表(数据库)中,则显示动态 Controller 的 Index ActionResult。

3)如果没有找到用户名,在高级列表中查找用户名

4) 如果用户名是高级列表(数据库)中的基金,则显示高级 Controller 的 Index ActionResult。

5) 如果所有其他方法都失败,则跳转到 404 页面(这将要求用户注册)

这可能吗?

查找用户两次对性能来说不是个好主意吗?

如何在不重定向的情况下执行此操作?

最佳答案

您的数据库是如何组织的?希望有一个带有高级状态指示器的用户表,如果是这样,那么您实际上只需要访问数据库一次。否则,您可能会受益于结合用户数据的 View 。

关于asp.net-mvc - 带有 ASP.NET 的动态 'twitter style' url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2596660/

有关asp.net-mvc - 带有 ASP.NET 的动态 'twitter style' url的更多相关文章

  1. ruby-on-rails - Ruby net/ldap 模块中的内存泄漏 - 2

    作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代

  2. ruby-on-rails - rails : "missing partial" when calling 'render' in RSpec test - 2

    我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou

  3. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  4. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  5. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  6. ruby - 如何模拟 Net::HTTP::Post? - 2

    是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou

  7. ruby - 主要 :Object when running build from sublime 的未定义方法 `require_relative' - 2

    我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby​​1.9+ 关于ruby-主要:Objectwhenrun

  8. ruby-on-rails - rails : save file from URL and save it to Amazon S3 - 2

    从给定URL下载文件并立即将其上传到AmazonS3的更直接的方法是什么(+将有关文件的一些信息保存到数据库中,例如名称、大小等)?现在,我既不使用Paperclip,也不使用Carrierwave。谢谢 最佳答案 简单明了:require'open-uri'require's3'amazon=S3::Service.new(access_key_id:'KEY',secret_access_key:'KEY')bucket=amazon.buckets.find('image_storage')url='http://www.ex

  9. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

  10. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

随机推荐