【问题标题】:Unable to call server side webmethod function无法调用服务器端 webmethod 函数
【发布时间】:2014-10-21 05:05:08
【问题描述】:

我正在使用summernote,我想将图像上传到我的网络服务器。下面是我正在使用的代码

默认.aspx

<script type="text/javascript">
    $(document).ready(function () {
        $('#summernote').summernote({
            onImageUpload: function (files, editor, $editable) {
                alert('image?');
                var formData = new FormData();
                formData.append("file", files[0]);

                $.ajax({
                    url: "Default.aspx/UploadImage",
                    data: formData,
                    type: 'POST',
                    cache: false,
                    contentType: false,
                    processData: false,
                    success: function (imageUrl) {
                        alert(imageUrl);
                        if (!imageUrl) {

                            // handle error

                            return;
                        }

                        editor.insertImage($editable, imageUrl);
                    },
                    error: function () {
                        alert('error');
                        // handle error
                    }
                });
                console.log('image upload:', files, editor, $editable);
            }
        });
    });
</script>

默认.asp.cs

[System.Web.Services.WebMethod]
    public static string UploadImage(HttpPostedFileBase file)
    {
        //Saving to Server

        return imageUrl;
    }

但它没有调用服务器端函数。此外,alert(imageUrl) 正在给我完整的页面 html。

我哪里错了?

使用网络信息更新问题(谷歌浏览器)

编辑 2

建议后更新

代码

 url: "About.aspx/UploadImage",
                   data: "multipart/form-data",
                   type: 'POST',
                   cache: false,
                   contentType: "application/json",

错误

注意:我已将页面从 Default.aspx 更改为 about.aspx(但代码相同)

【问题讨论】:

  • 检查 URL - “Default.aspx/UploadImage”,这可能是问题所在。为了进一步调试打开 chrome 网络选项卡 (F12) 并检查状态代码和 AJAX 调用的响应。
  • 附带问题,您持有该方法的类是否具有[ScriptService] 属性?
  • @abhi 我已经上传了我的问题
  • POST 调用的响应是什么? 400 bad request 也是同一个呼叫的一部分吗?
  • @Holybreath 在 default.aspx.cs 页面中 public partial class _Default : Page

标签: jquery asp.net webmethod


【解决方案1】:

WebMethod 或“页面方法”expect contentType: "application/json;

其他参考:Scott Guthrie - JSON Hijacking and How ASP.NET AJAX 1.0 Avoids these Attacks:

ASP.NET 为基于 GET 和 POST 的 ASP.NET AJAX Web 方法强制实施了一个内置的保护验证层,即不管使用的 HTTP 动词如何,ASP.NET 总是要求将 HTTP Content-Type 标头设置为值 application/json。如果不发送此内容类型标头,ASP.NET AJAX 将拒绝服务器上的请求。

  • 这就是为什么您的 alert 返回页面 (html),您的调用 成功 调用了 page (default.aspx),但 webmethod不 被调用。

this for direction/possible solution


我认为您感到困惑,可能是我的错。我会尽量简化:

  • 链接中的建议是使用 WebMethod。
  • 为了发送文件,您的contentType 必须是multipart/form-data
  • 但如上所述,WebMethods 要求 contentTypeapplication/json
  • 它不适用于 WebMethods(因此链接建议使用通用处理程序)。

第...

【讨论】:

  • 感谢您的回答。我尝试使用 contentType:“application/json; charset=utf-8”,也尝试使用 contentType:“application/json”。但现在它将进入错误部分。还有什么我错了吗?
  • @Zerotoinfinite 请参阅link above 了解可能的替代方案/解决方案 - 回复:根据您的代码,您似乎需要发送 multipart/form-data(它不适用于 PageMethods)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-19
  • 2011-12-09
  • 2011-03-13
相关资源
最近更新 更多