[使用C#读取附加到HTTP扩展的BLOB

问题描述 投票:3回答:1

因此,我正在使用第三方服务,该服务使我可以编辑存储在服务器路径上的XML文件。现在,一旦完成XML的编辑,我便将该文件保存到本地存储器中,该存储器会生成附加到URL的BLOB。

示例:

blob:http://localhost/0e06af7a-a1a9-4bf1-a79a-78a1e107648f

0e06af7a-a1a9-4bf1-a79a-78a1e107648f是为当前编辑创建的标记。现在,当我在浏览器中运行上述URL时,可以看到:

enter image description here

我的问题是:如何使用C#读取上述URL,然后将内容保存到对象中,以后再用于上载到文件或云中。我尝试使用WebClient

WebClient client = new WebClient();
Stream stream = client.OpenRead("blob:http://localhost/0e06af7a-a1a9-4bf1-a79a-78a1e107648f");
StreamReader reader = new StreamReader(stream);
string str= reader.ReadToEnd();

但是它给我一个错误,说URL不正确,应该以HTTPHTTPS开头。

编辑:我能够使用JQuery将Blob保存到文件中:

var download = $('<a>Download ' + "file.xml" + '</a>').attr("href", "blob:http://localhost/0e06af7a-a1a9-4bf1-a79a-78a1e107648f");
download.attr("download", "file.xml");

这将成功创建一个名为file.xml的文件并下载该文件。我希望将此blob内容保存在服务器端,以便可以将其发送到Amazon S3存储桶。

再次编辑:

因此,当前我将XML保存为字符串,我试图通过AJAX将其发送到C#控制器,但遇到500内部服务器错误。

        var xmlString = self.xml2Str(self.xmlState.xml);
        //console.log(xmlString);
        var blob = new Blob([xmlString], { type: "text/xml" }); 
        console.log(blob);
        var url = URL.createObjectURL(blob);
        console.log(url);
        var json = {
            xmlString: xmlString
        };

        var test = JSON.stringify(json);
        console.log(test);

        try {
            $.ajax({
                url: BaseURL + "Home/SendXMLToS3",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                data: { "json": test},
                type: "POST",
                success: function (data) {
                    //TODO: Add whatever if you want to pass a notification back
                    alert("Done");
                },
                error: function (error) {
                    //TODO: Add some code here for error handling or notifications
                    alert("Not Done");
                }
            });
        }
        catch (err) {
            console.log(err);
        }

test变量的内容如下(从控制台):

{"xmlString":"<nitf>\n  <head>\n    <docdata>\n      <identified-content>\n        <classifier id=\"box-geometry\" value=\"147,623,250,790\" />\n        <classifier id=\"uuid\" value=\"Mv8XVAViEeqyc3SUunSxMg\" />\n      </identified-content>\n    </docdata>\n  </head>\n  <body>\n    <body.head />\n    <body.content>\n      <p>\n        <lang fontStyle=\"regular\" style=\".Bodylaser\">How is this different from Pegasus?</lang>\n      </p>\n      <p>\n        <lang fontStyle=\"regular\" style=\".Bodylaser\">Pegasus could be installed on your phone without your knowledge through just a missed WhatsApp video call. In the case of the new breach, a user has to manually download the MP4 file sent to them before any malicious code can be run. The problem is not with WhatsApp’s end-to-end encryption feature here. Getting remote access to your phone is the equivalent of actually holding it in one’s hand. End-to-end encryption is meant to stop attackers from stealing or snooping on chats in between. So, unless someone has access to your device, they can’t actually read your chats, even if they intercept them.</lang>\n      </p>\n    </body.content>\n  </body>\n</nitf>"}

还尝试设置默认的ASP.NET,默认情况下启用了请求验证,以帮助防止XSS设置为false。

    [HttpPost]
    [ValidateInput(false)]
    public ActionResult SendXMLToS3(string json)

仍然存在相同的500错误:jquery.min.js:4 POST http://localhost/DEGit/Home/SendXMLToS3 500 (Internal Server Error)方法中的h.send(c.hasContent&&c.data||null)

我如何:

  1. 以C#读取生成的blob URL内容吗?
  2. 通过AJAX将test字符串发送到C#吗?
  3. 你们还有其他建议。

谢谢

c# ajax http blob asp.net-ajax
1个回答
0
投票

您在注释中要求的:我制作了简单的控制器和JS代码,使用ajax在控制器内命中了httppost方法:

  1. 控制器方法:
[HttpPost]
public JsonResult SendXMLToS3(string json)
{
    return Json(new { Result = "PASS", Message = "testing SendXMLToS3" });
}
  1. JS代码:
<script type="text/javascript">
    function myfunction() {

        var test = { "xmlString": "<nitf>...</nitf>" };
        $.ajax({
            type: "post",
            url: "/Home/SendXMLToS3",
            dataType: "json",
            data: { "json": test },
            success: function (res) {
                alert(res.Message);
            },
            error: function (res) {
                //TODO: Add some code here for error handling or notifications
                alert("Not Done");
            }
        });
    }
</script>

发现contentType: "application/json; charset=utf-8",行引起内部500错误,如果删除它,应该没问题。

© www.soinside.com 2019 - 2024. All rights reserved.