使用Ajax Web服务将文件路径从Javascript传递到c#

Passing File Path From Javascript to C# Using Ajax Web Service

本文关键字:Javascript 路径 Web Ajax 服务 文件 使用      更新时间:2023-09-26

我有一个ASP。带有按钮的。Net网站,这些按钮将文件路径传递给执行对web方法的ajax调用的javascript函数。下面传递给openDoc的文件路径是JSON.stringify('fs01'Documents…)

的结果
  <input type="button" id="b0" value="Open" onclick="openDoc('&quot;''''fs01''Documents''2011''MEASEJA''1108030203&nbsp;(1)&nbsp;10-3-2011&nbsp;Mart&nbsp;Cart&nbsp;Service&nbsp;Completion&nbsp;Survey.pdf&quot;');">
    function openDoc(filename) {
    var xml = new XMLHttpRequest();
    xml.open("POST", "Default.aspx", true);
    xml.onreadystatechange = function () {
        if (xml.readyState == 4) {
            if (xml.status == 200) {
                $.ajax({
                    type: "POST",
                    dataType: "json",
                    contentType: "application/json",
                    url: "Service.asmx/openDoc",
                    data: '{ file:' + filename + '}',
                    success: function () { },
                    error: function (xml, status, error) {
                        var err = eval("(" + xml.responseText + ")");
                        alert("Open Doc: " + xml.Message);
                    }
                });
            }
        }
    }
    xml.send(null);
}
[WebMethod]
public byte[] openDoc(string file)
{
    FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read);
    byte[] buffer;
    try
    {
        int length = (int)fs.Length;
        buffer = new byte[length];
        int count;
        int sum = 0;
        while ((count = fs.Read(buffer, sum, length - sum)) > 0)
            sum += count;
    }
    catch (Exception ex)
    {
        throw (ex);
    }
    finally
    {
        fs.Close();   
    }
    return buffer;
}

问题是,在这个过程中,文件路径中的'发生了一些事情,并从使用firebug的ajax调用接收到这样的错误:

"无法识别的转义序列。(16): {file:"'fs01'Documents'2011'MEASEJA'1108030203 (1) 10-3-2011 Mart Cart服务完成情况调查。pdf"}"

我知道在c#中,你必须把所有的'都翻倍,但这就是文件路径从按钮点击开始的方式。在某个地方,我丢失了额外的''s, c#无法将其作为文件处理。

尝试查找单个反斜杠,如果需要则将其加倍

//pseudocode
if (s.StartsWith(@"'f")) s.Prepend(@"'");