Передача пути к файлу из JavaScript в C # с помощью веб-службы Ajax

#c# #javascript #json

#c# #javascript #json

Вопрос:

У меня есть ASP.Веб-сайт Net с кнопками, которые передают путь к файлу функции javascript, которая выполняет ajax-вызов веб-метода. Путь к файлу, который, как вы видите, передается в OpenDoc ниже, является результатом JSON.stringify(fs01 Documents …)

   <input type="button" id="b0" value="Open" onclick="openDoc('amp;quot;\\fs01\Documents\2011\MEASEJA\1108030203amp;nbsp;(1)amp;nbsp;10-3-2011amp;nbsp;Martamp;nbsp;Cartamp;nbsp;Serviceamp;nbsp;Completionamp;nbsp;Survey.pdfamp;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;
}
  

Проблема в том, что где-то на этом пути что-то происходит с в пути к файлу и возникают подобные ошибки при вызове ajax с использованием firebug:

«Нераспознанная escape-последовательность. (16): { файл: » fs01 Documents 2011 MEASEJA 1108030203 (1) 10-3-2011 Обзор завершения обслуживания Mart Cart.pdf»}»

Я знаю, что в C # вам нужно удвоить все , но именно так путь к файлу начинается с нажатия кнопки. Где-то по ходу дела я теряю дополнительные данные, и C # не может обработать их как файл.

Ответ №1:

попробуйте найти одну обратную косую черту и удвоить, если необходимо

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

Комментарии:

1. Прежде чем я передам его в качестве параметра ajax?

2. На самом деле, поцарапайте это. Теперь, когда я внимательно смотрю, я знаю, к чему вы клоните. Я попробую и дам вам знать.

3. Добавлено if (file. Начинается с (@»f»)) { file = @»» file; } в начало веб-метода, но я получаю ту же ошибку.