вызвать API от ajax asp.net - PullRequest
       1

вызвать API от ajax asp.net

0 голосов
/ 30 апреля 2018

У меня есть веб-интерфейс, который позволяет мне добавить несколько изображений с другим параметром (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 находится в другом домене, и у меня есть приложение веб-формы, которое хочет загрузить изображение из него, используя предыдущий 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 голосов
/ 30 апреля 2018

Убедитесь, что вы не получаете сообщение об ошибке XSS (обычно другие домены настроены так, что вы не сможете инициировать вызовы с адресов другого домена).

В приведенном ниже коде я не уверен, почему у вас / api / api

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

Пожалуйста, напишите нам сообщение об ошибке вы получаете

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...