无法调用服务器端webmethod功能

时间:2014-08-27 14:38:31

标签: jquery asp.net webmethod

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

Default.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>

Default.asp.cs

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

        return imageUrl;
    }

但它没有调用服务器端功能。另外,alert(imageUrl)给了我完整的页面HTML。

我哪里错了?

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

enter image description here

修改2

建议后更新

代码

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

错误

enter image description here

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

1 个答案:

答案 0 :(得分:4)

WebMethod或&#34; Page方法&#34; 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 always 要求将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(因此链接建议使用通用处理程序)。

... H个