【问题标题】:Route a button to a static IP address in C#将按钮路由到 C# 中的静态 IP 地址
【发布时间】:2013-06-18 05:51:40
【问题描述】:

我在 .NET 的世界里还是个婴儿,我被赋予了一项我似乎无法解决的任务。

我需要一个应用程序来连接到多个数据库。数据库具有静态 IP 地址。

所以基本上当用户点击按钮 database1 时,它会转到 IP1,如果他们点击 database2,它会自动路由到 IP2。

我觉得我忽略了一些可能如此简单的事情。

谢谢

【问题讨论】:

  • 需要知道如何连接数据库。您应该查看 App.Config 和 ConfigurationManager,因为有专门设置用于处理多个连接字符串的属性,但这完全取决于您的连接方式。如果它在任何地方都被硬编码,则需要将其换成“活动”字符串。编辑:刚刚注意到这是针对网络的。有些 Web.Config 文件的处理方式与 App.Config 相同
  • 是的,我在 web.config 中,这就是我目前所拥有的。
  • 很抱歉,这个网站的新手。现在我不知道在哪里创建像 RouteHandler 和 HttpHandler 方法这样的类。就像我说的,在 .NET 世界中非常新

标签: c# asp.net .net asp.net-mvc database


【解决方案1】:

以前从未这样做过,但有一些想法来实现这一点。在我的项目中,我引用了 2 个数据库。 PostgreSQL 和甲骨文。 在我的应用程序中,我有几个提供者类实现数据库访问并为此使用 Executor 类。 要创建此执行程序的实例,我需要使用我的数据库的 IP(在本地网络中)传递连接字符串。 我从 Web.config 文件中收到的连接字符串,如

    //Here is the connection strings with IP, Login, and DBname from web.config You need to configure it dynamicaly
    private string PostgreSQLConnection = WebConfigurationManager.ConnectionStrings["PostgreSQLConnection"].ConnectionString;
    private string OracleConnection = WebConfigurationManager.ConnectionStrings["OracleConnection"].ConnectionString;

    using (PostgreSQLExecutor executor = new PostgreSQLExecutor(PostgreSQLConnection))
    {
        executor.ExecuteQuery(@"query");
    }

    using (OracleSQLExecutor executor = new OracleSQLExecutor(OracleConnection))
    {
        executor.ExecuteQuery(@"query");
    }

将任何字符串作为连接字符串传递是没有问题的。 我不知道你的应用程序使用什么数据库访问库,但我确信它有你的类女巫来配置你的会话,就像我的例子一样。 所以,我认为你只需要找到你的数据库配置类并实现动态配置逻辑。 最好用这样的数据库部分创建路由。

 routes.MapRoute(
               name: "Default",
               url: "{databaseSection}/{controller}/{action}/{id}",
               defaults: new { databaseSection = "sectionName1", controller = "Home", action = "Index", id = UrlParameter.Optional },
               constraints: new { databaseSection = "sectionName1|sectionName2" }
           );

因此,如果应用程序将 url 切换到 site.com/sectionName2/home/index,您可以检索部分名称并将您的数据库访问配置为全局行为。 例如在 global.asax Application_BeginRequest 事件中

 protected void Application_BeginRequest(object sender, EventArgs e)
 {
    string section = Request.RequestContext.RouteData.Values["databaseSection"].ToString();
    if(section == sectionName2)
    {
        do some stuff to configure your database session 
    }
    else
    {
        default behavior
    }
 }

或者,您可以为此使用 cookie。 希望能帮助到你。对不起我的英语/:

【讨论】:

  • 就像我第一次说的那样,哈哈,真是个菜鸟。这种方法是否适用于外部 IP。使用我的应用程序,我需要单击一个按钮,该按钮将在同一窗口中显示数据库。或者至少是表或视图,具体取决于用户权限。不过,数据库应该可以从任何地方访问,包括互联网、VPN、本地等等。
【解决方案2】:

1) 在 web.config 文件中有 2 个连接。 2) 在按钮上单击事件是指第一个 IP,在另一个按钮上单击连接另一个 IP。

【讨论】:

  • ok 看起来很简单,但我还是得先做 system.web.routing 吧?
  • 冒着听起来像个菜鸟的风险,你能给我更多的信息吗?我以前从来没有这样做过。现在回想起来,也许我的问题有点不清楚。当我进入我的应用程序时,需要一个按钮(当然已经完成),然后当我单击它时,页面上会出现一个列表,然后我应该能够看到一个表格或视图,具体取决于我的用户配置文件。数据库位于静态 IP 上并通过互联网连接,因此不是本地的。
猜你喜欢
  • 1970-01-01
  • 2020-10-21
  • 2020-04-26
  • 2020-03-18
  • 2019-04-13
  • 2018-11-04
  • 2014-03-10
  • 2015-03-10
  • 2022-10-19
相关资源
最近更新 更多