【问题标题】:c# Windows Forms Application MVC 403 error when creating a download filec#创建下载文件时出现Windows Forms Application MVC 403错误
【发布时间】:2017-07-30 10:03:08
【问题描述】:

我创建了一个 MVC 站点,它有一个下载按钮(它调用一个 JS Blob 文件创建)。 这在浏览器和移动设备中运行良好, 我现在正试图让它在 c# Windows 窗体应用程序中工作(一个非常基本的窗体,添加了一个 WebBrowser 通用控件,指向该网站)。 我需要将以下代码添加到 HTML,以便它可以在应用程序中打开

<meta http-equiv="X-UA-Compatible" content="IE=Edge">

否则,它会在尝试访问站点 js 文件时给我错误。 “blob”代码看起来像

$('.btn-success').click(function () {
                 var CSV = [
                     '"1","val1","val2","val3","val4"',
                     '"2","val1","val2","val3","val4"',
                     '"3","val1","val2","val3","val4"'
                 ].join('\n');

                 window.URL = window.webkitURL || window.URL;

                 var contentType = 'text/csv';

                 var csvFile = new Blob([CSV], { type: contentType });

                 var xmlcsv = document.createElement('a');
                 xmlcsv.download = 'XMLtoCSV.csv';
                 xmlcsv.href = window.URL.createObjectURL(csvFile);
                 xmlcsv.textContent = 'Download CSV';

                 xmlcsv.dataset.downloadurl = [contentType, xmlcsv.download, xmlcsv.href].join(':');
                 console.log(xmlcsv);
                 //document.body.appendChild(xmlcsv);
                 xmlcsv.click();
             });

当我从应用程序中运行它时,单击下载按钮时会收到以下消息

403 error

注意:第 430 行 = xmlcsv.click();

有人可以建议吗? 谢谢

【问题讨论】:

    标签: javascript c# asp.net-mvc visual-studio


    【解决方案1】:

    点击时只需更改按钮的href,不要创建新的A元素,我认为这是浏览器对弹出窗口的保护。

    <!doctype html>
    <html>
    <head>
        <title>test download</title>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    </head>
    <body>
    <a class="btn-success" download="a.csv" href="#">Download CSV</a>
    <script>
    $(function(){
        $('.btn-success').click(function () {
            var CSV = [
                '"1","val1","val2","val3","val4"',
                '"2","val1","val2","val3","val4"',
                '"3","val1","val2","val3","val4"'
            ].join('\n');
    
            $(this).attr('href', 'data:text/csv;charset=utf-8,' + encodeURI(CSV));
        });
    });
    </script>
    </body>
    </html>
    

    【讨论】:

    • 感谢您的回复,但如果我将您的代码换成我的代码(在我的 HTML 和 JS 文件中),该按钮将停止在浏览器中工作,并在 c# 应用程序中显示“找不到页面”。有没有我可以用 ('a') 代替的值?我一直试图找到一个,但没有运气。再次感谢
    • 奇怪,我在我的 chrome 上测试过这段代码,很好。 window.open() 在 C# 中有效吗?
    • 我对 c# 和 Web 窗体还很陌生,所以不确定 windows.open() 是否可以在 Web 窗体和浏览器中工作
    • 嗨@h0x91B,我相信我可以通过将代码更改为 var urlCreator = window.URL || window.webkitURL ||窗口.mozURL ||窗口.msURL; var contentType = '文本/csv'; var csvFile = new Blob([CSV], { type: contentType }); window.navigator.msSaveOrOpenBlob(csvFile, 'bookingXML.csv'); // 现在用户可以选择单击“保存”按钮和“打开”按钮。 //alert('使用 msSaveOrOpenBlob() 发出的文件保存请求 - 注意下面的两个“打开”和“保存”按钮。'); });感谢所有帮助过的人
    【解决方案2】:

    我相信我可以通过将代码更改为

    var urlCreator = window.URL || window.webkitURL || window.mozURL || window.msURL;
    
    var contentType = 'text/csv';
    
    var csvFile = new Blob([CSV], { type: contentType });
    
    window.navigator.msSaveOrOpenBlob(csvFile, 'bookingXML.csv'); // Now the user will have the option of clicking the Save button and the Open button.
                     //alert('File save request made using msSaveOrOpenBlob() - note the two "Open" and "Save" buttons below.');
    
                 });
    

    感谢所有帮助过的人

    【讨论】:

      【解决方案3】:

      只是一个更新,这是我正在使用的(似乎)适用于 PC 和移动设备的代码。

         $('.btn-success').click(function () {
                   var CSV = [
                       '"1","val1","val2","val3","val4"',
                       '"2","val1","val2","val3","val4"',
                       '"3","val1","val2","val3","val4"'
                   ].join('\n');
      
                      if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
                          window.URL = window.webkitURL || window.URL;
      
                          var contentType = 'text/csv';
      
                          var csvFile = new Blob([CSV], { type: contentType });
      
                          var xmlcsv = document.createElement('a');
                          xmlcsv.download = 'XMLtoCSV.csv';
                          xmlcsv.href = window.URL.createObjectURL(csvFile);
                          xmlcsv.textContent = 'Download CSV';
                          xmlcsv.dataset.downloadurl = [contentType, xmlcsv.download, xmlcsv.href].join(':');
                          console.log(xmlcsv);
                          xmlcsv.click();
      
                      }
                      else {
                       var urlCreator = window.URL || window.webkitURL || window.mozURL || window.msURL;
                       var contentType = 'text/csv';
                       var csvFile = new Blob([CSV], { type: contentType });
                       window.navigator.msSaveOrOpenBlob(csvFile, 'bookingXML.csv'); // Now the user will have the option of clicking the Save button and the Open button.
                      }
                   });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-20
        • 2013-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多