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

本文关键字:AJAX C#WebMethod 通过 | 更新日期: 2023-09-27 18:00:59

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

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

注意:

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

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

您可以使用字符@使字符串不可避免。因此,您不能在其中输入转义字符(这就是您的服务器认为您正在通过放置反斜杠来完成的操作(。

示例:

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

我希望这能帮助你前进:-(。