通过AJAX向C#WebMethod发送反斜杠

时间:2014-04-30 10:34:25

标签: c# asp.net ajax .net-4.0

我有以下简单的代码,它向C#Webmethod发送一些参数。 Web方法测试数据库连接并返回成功或错误消息

TestDb.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TestDb.aspx.cs" Inherits="TestDb" %>
<html>
<head>
    <script type="text/javascript" src="http://localhost/js/jquery-1.10.2.min.js"></script>
    <script type="text/javascript">
        $(function () {
            $("#BtnTestDb").click(function () {
                $.ajax({
                    type: "POST",
                    url: "TestDb.aspx/CheckDbConnection",
                    data: '{"ServerName":"' + $("#edtDbServer").val() +
                        '", "UserName":"' + $("#edtDbUser").val() +
                        '", "Password":"' + $("#edtDbPassword").val() +
                        '", "Database":"' + $("#edtDbName").val() + '"}',
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (response) {
                        alert("success: " + response.d)
                    },
                    error: function (xhr, status, error) {
                        alert("error:" + error);
                    }
                });
            });
        });
    </script>
</head>
<body>
    <table cellpadding="0" cellspacing="4">
        <tr>
            <td class="">Server</td>
            <td><input type="text" id="edtDbServer" /></td>
        </tr>
        <tr>
            <td>Username</td>
            <td><input type="text" id="edtDbUser" /></td>
        </tr>
        <tr>
            <td>Password</td>
            <td><input type="text" id="edtDbPassword" /></td>
        </tr>
        <tr>
            <td>Database</td>
            <td><input type="text" id="edtDbName" /></td>
            <td align="left"><input type="button" id="BtnTestDb" value="Test Connection" /></td>
        </tr>
    </table>
</body>
</html>

TestDb.aspx.cs

using System;
using System.Data.SqlClient;
using System.Web.Services;

public class TestDb: System.Web.UI.Page {

    [WebMethod(EnableSession = true)]
    public static string CheckDbConnection(string ServerName, string UserName, string Password, string Database) {
        if (ServerName != "" && UserName != "" && Password != "" && Database != "") {

            SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
            builder.DataSource = ServerName;
            builder.UserID = UserName;
            builder.Password = Password;
            builder["Initial Catalog"] = Database;
            SqlConnection conn = new SqlConnection(builder.ConnectionString);
            try {
                conn.Open();
                conn.Close();
                return "Ok";
            } catch (Exception ex) {
                return "Error: " + ex.Message;
            }
        } else {
            return "Error: Required fields are missing.";
        }
    }
}

只要数据库是默认实例(名称中没有反斜杠),此代码就可以正常工作 但是,如果我有一个数据库实例,例如.\sqlexpress,则此代码会中断。

问题:

通过在servername输入中添加反斜杠,Webmethod将不接受输入并向我发送Internal server error消息。

但是,通过添加两个反斜杠(.\\sqlexpress),webMethod将接收数据,但现在我在服务端有两个反斜杠(完全.\\sqlexpress

问题:

如何向WebMethod具体.\sqlexpress

发送单反斜杠

备注:

我知道可以将客户端的所有反斜杠替换为两个反斜杠,并将它们替换回服务器端的单反斜杠。我最好寻找更好的解决方案。

1 个答案:

答案 0 :(得分:0)

您可以使用字符@来使字符串不可避免。所以你不能在其中输入转义字符(这是你的服务器认为你通过反斜杠做的事情)。

示例:

string test = "This is a \r\n test";
Console.WriteLine(test);

OUTPUT:
This is a 
test

string test2 = @"This is a \r\n test";
Console.WriteLine(test2);

OUTPUT:
This is a \r\n test

我希望这可以帮助你前进: - )。