将数据作为null传递给HttpContext.Current.Request

时间:2018-06-02 08:30:16

标签: javascript html angularjs asp.net-web-api

我有一个文件上传模块。没有内容类型的邮递员工作得很好。但在代码中,文件总数在后端api中变为0。如果有人知道我做错了什么,请帮助我。感谢

这是我的后端api`

    public async Task<HttpResponseMessage> PostUserImage()
    {
        Dictionary<string, object> dict = new Dictionary<string, object>();
        try
        {

            var httpRequest = HttpContext.Current.Request;

            foreach (string file in httpRequest.Files)
            {
                HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created);

                var postedFile = httpRequest.Files[file];
                if (postedFile != null && postedFile.ContentLength > 0)
                {

                    int MaxContentLength = 1024 * 1024 * 1; //Size = 1 MB  

                    IList<string> AllowedFileExtensions = new List<string> { ".jpg", ".gif", ".png" };
                    var ext = postedFile.FileName.Substring(postedFile.FileName.LastIndexOf('.'));
                    var extension = ext.ToLower();
                    if (!AllowedFileExtensions.Contains(extension))
                    {

                        var message = string.Format("Please Upload image of type .jpg,.gif,.png.");

                        dict.Add("error", message);
                        return Request.CreateResponse(HttpStatusCode.BadRequest, dict);
                    }
                    else if (postedFile.ContentLength > MaxContentLength)
                    {

                        var message = string.Format("Please Upload a file upto 1 mb.");

                        dict.Add("error", message);
                        return Request.CreateResponse(HttpStatusCode.BadRequest, dict);
                    }
                    else
                    {



                        var filePath = HttpContext.Current.Server.MapPath("~/Image/" + postedFile.FileName + extension);

                        postedFile.SaveAs(filePath);

                    }
                }

                var message1 = string.Format("Image Updated Successfully.");
                return Request.CreateErrorResponse(HttpStatusCode.Created, message1); ;
            }
            var res = string.Format("Please Upload a image.");
            dict.Add("error", res);
            return Request.CreateResponse(HttpStatusCode.NotFound, dict);
        }
        catch (Exception ex)
        {
            var res = string.Format("some Message");
            dict.Add("error", res);
            return Request.CreateResponse(HttpStatusCode.NotFound, dict);
        }
    }`

这是我通过邮递员without content type

发布后的内容

这就是我在开发人员控制台content type is adding中获得的内容。 我的角色服务敌人上传`

uploadimage:function(file,operation){
            var deferred = $q.defer();
            var httpReq = {
                method: operation,
                url: '/API/Customers/PostUserImage',
                data:file,
                transformRequest: angular.identity,

                headers: {
                    'content-type': 'multipart/form-data'
                },
                onSuccess: function (response, status) {
                    deferred.resolve(response);
                },
                onError: function (response) {
                    deferred.reject(response);
                }
            };
            httpService.call(httpReq);
            return deferred.promise;
        }`

这是用于附加表单数据的控制器代码

function readURL(input) {
        debugger;
        if (input.files && input.files[0]) {
            var reader = new FileReader();
            reader.onload = function(e) {
                $('#imagePreview').css('background-image', 'url('+e.target.result +')');
                $('#imagePreview').hide();
                $('#imagePreview').fadeIn(650);
            }
            reader.readAsDataURL(input.files[0]);

            var filesformdata = new FormData();
            angular.forEach(input.files, function (value, key) {
                filesformdata.append(key, value);
            });
            for (var pair of filesformdata.entries()) {
                console.log(pair[0] + ', ' + pair[1]);
                console.log(pair[1]);
            }
            profileService.uploadimage(filesformdata,"POST").then(function(response){
                toastr.success("profilepicture changed");
            });
        }
    }

这里是http请求screenshot`

2 个答案:

答案 0 :(得分:0)

使用API​​

    public async Task<HttpResponseMessage> MethodName()
    {

        if (HttpContext.Current.Request.ContentType == "application/x-www-form-urlencoded")
        {
          var  ParameterName = int.Parse(HttpContext.Current.Request.Form.GetValues("ParameterName")[0].ToString());
        }
        else
        {

            if (!Request.Content.IsMimeMultipartContent())
            {
                throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
            }

        }
         var response = Request.CreateResponse(objreturn);

        return response;
  }

答案 1 :(得分:0)

发送非字母数字文件或大负载时,您应该使用“multipart / form-data”的表单enctype属性值。

<form enctype="multipart/form-data" ...

示例:HTML Form Data in ASP.NET Web API: File Upload and Multipart MIME

public async Task<HttpResponseMessage> PostFormData()
{
    // Check if the request contains multipart/form-data.
    if (!Request.Content.IsMimeMultipartContent())
    {
        throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
    }

    string root = HttpContext.Current.Server.MapPath("~/App_Data");
    var provider = new MultipartFormDataStreamProvider(root);

    try
    {
        // Read the form data.
        await Request.Content.ReadAsMultipartAsync(provider);

        // This illustrates how to get the file names.
        foreach (MultipartFileData file in provider.FileData)
        {
            Trace.WriteLine(file.Headers.ContentDisposition.FileName);
            Trace.WriteLine("Server file path: " + file.LocalFileName);
        }
        return Request.CreateResponse(HttpStatusCode.OK);
    }
    catch (System.Exception e)
    {
        return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
    }
}