从ajax asp.net调用api

时间:2018-04-30 11:50:09

标签: c# asp.net-web-api

我有一个网络Api,允许我添加一个带有另一个参数的多个图像 (place_Id,is_Main)

我使用下面的代码上传图片

    [Route("api/Image")]
    [HttpPost]
    public async Task<IHttpActionResult> PostImage()
    {
        // Check if the request contains multipart/form-data.
        if (!Request.Content.IsMimeMultipartContent())
        {
            throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
        }

        string root = HttpContext.Current.Server.MapPath("~/Images/Places");
        var provider = new CustomMultipartFormDataStreamProvider(root);

        try
        {
            // Read the form data.
            var task = await Request.Content.ReadAsMultipartAsync(provider).ContinueWith<IEnumerable<FileDesc>>(t =>
            {

                if (t.IsFaulted || t.IsCanceled)
                {
                    throw new HttpResponseException(HttpStatusCode.InternalServerError);
                }

                var fileInfo = provider.FileData.Select(d =>
                {
                    var info = new FileInfo(d.LocalFileName);
                    //return new FileDesc(info.Name);
                    return new FileDesc(info.Name);
                });
                return fileInfo;
            });


            int placeId = int.Parse(provider.FormData["placeId"]);
            bool isMain = Convert.ToBoolean(provider.FormData["isMain"]);

            var listOfAttchments = task.ToList();

            string attachmentsPath = Request.RequestUri.Scheme +
                System.Uri.SchemeDelimiter +
                Request.RequestUri.Host +
                (Request.RequestUri.IsDefaultPort ? "" : ":" + Request.RequestUri.Port) +
                "/Images/Places/";

            Images i = new Images();

            if (listOfAttchments.Count > 0)
            {
                foreach (var item in listOfAttchments)
                {
                    i.FileLocation = item.name;
                    i.FromUser = true;
                    i.TableName = "Places";
                    i.IsMain = isMain;
                    i.TableId = placeId;

                    db.Images.Add(i);

                }
            }


            await db.SaveChangesAsync();
            return Ok(new
            {
                result = true,
                listAttachmment = listOfAttchments

            }
            );
        }
        catch (System.Exception e)
        {
            return BadRequest(e.StackTrace + "\nTest" + e.Data + "\nTest" + e.InnerException + "\nTest" + e.Message + "\nTest" + e.Source + "\nTest" + e.TargetSite);
        }
    }

之前的api在另一个域中, 我有一个Web表单应用程序,想要使用以前的api上传图像

var data = new FormData();
        jQuery.each(jQuery('#file')[0].files, function (i, file) {
            data.append(" placeId: 7, isMain: 1");
            data.append('image1' + i, file);
        });
        $("#btn2").click(function () {

        jQuery.ajax({
            url: '{url}/api/api/Image',
            data: data,

            contentType: false,
            processData: false,
            method: 'POST',
            type: 'POST', // For jQuery < 1.9
            success: function (data) {
                alert(data);
            }
        });
        });

我使用上面的代码来调用它,但是我有一个问题, 你能帮我吗

1 个答案:

答案 0 :(得分:0)

请确保您没有收到XSS错误消息(通常配置其他域,您将无法从其他域地址触发呼叫)。

在下面的代码中,我不知道为什么你有/ api / api

url: '{url}/api/api/Image',

请将您收到的错误消息发给我们