繁体   English   中英

从MVC Project调用Web APi

[英]Call Web APi from MVC Project

我已经在C#ASP.NET MVC和ADO.NET Entity Model使用Oracle Database创建了Web API,并且一切正常。 现在,我需要创建另一个将调用此API的项目。 我创建此文件是因为此Web API是应用程序的一部分,它将连接到另一个应用程序。 我在控制器中创建一个新的MVC项目

 public ActionResult GetAkontas()
        {
            IEnumerable<AkontasViewModel> akontas = null;

            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri("http://localhost:57285/api/");


               var responseTask = client.GetAsync("akontas");
               responseTask.Wait();
               var result = responseTask.Result;

                if (result.IsSuccessStatusCode)
                {
                    var readTask = GetReadTask(result);
                    readTask.Wait();

                    akontas = readTask.Result;
                }
                else
                {
                    //Error response received   
                    akontas = Enumerable.Empty<AkontasViewModel>();
                    ModelState.AddModelError(string.Empty, "Server error try after some time.");
                }
            }
            return View(akontas);

        }

这是我不知道如何调用它的API控制器的问题,因为我使用Oracle数据库,是否需要与服务器建立连接?

我创建模型但不确定是否需要它

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace AkontasMVCWebApi.Models
{
    public class AkontasViewModel
    {
        public string A_KONTO { get; set; }
        public string NAZIV { get; set; }
        public string SIFRA_RAD { get; set; }
        public string OPSTINA { get; set; }
        public string MB { get; set; }
        public string ULICA { get; set; }
        public string BROJ { get; set; }
        public string PBROJ { get; set; }
        public string MJESTO { get; set; }
        public string PORESKI { get; set; }
        public string TRANSAKCIJ { get; set; }
        public string INTERNET { get; set; }
        public string EMAIL { get; set; }
        public string KONTAKT { get; set; }
        public string TELEFON { get; set; }
        public string FAKS { get; set; }
        public DateTime? DAT_UNOS { get; set; }
        public string PDVMB { get; set; }
        public string VRSTA_KLIJENTA { get; set; }
        public string DRZAVA { get; set; }
    }
}

这是我第一次使用Oracle数据库和ADO.NET实体,但不确定如何执行此操作,请创建一个将调用(使用)我的API

UPDATE

这是我的Web API项目

调节器

using System.Linq;
using System.Web.Http;
using System.Web.Http.Description;

namespace AkontasWebApi.Controllers
{
    public class AkontasController : ApiController
    {
        //Ovo je objekat kojem se pristupa kroz bazu
        public AkontasEntities db = new AkontasEntities();

        // GET: api/Akontas
        //Ovo je funkcija koja vraca Listu<> svih AKONTASA iz baze ne vezano po ID-u
        [HttpGet]
        [Route("api/Akontas")]
        public IQueryable<AKONTA> GetAKONTAS()
        {
            return db.AKONTAS;
        }

        // GET: api/Akontas/5 -> ovo je routing tacnije putanja kako se koristi ova funkcija           
        //Ovo je funkcija koja vraca AKONTAS po ID-u 
        [HttpGet]
        [ResponseType(typeof(AKONTA))]
        public IHttpActionResult GetAKONTA(string id)
        {
            AKONTA aKONTA = db.AKONTAS.Find(id);
            if (aKONTA == null)
            {
                return BadRequest("Ne postoji A_KONTO pod tim rednim brojem");
            }

            return Ok(aKONTA);
        }

    }
}

索引检视

<br /><br />
<form>
    <div class="form-group">
        <label>A_KONTO</label>
        <input type="text" class="form-control" aria-describedby="AKONTO BROJ" placeholder="Unesite broj AKONOTO" id='AkontasId'>
    </div>

    <div class="form-group">
        <a class="btn btn-primary" id="aKonto" onClick='aKontoSubmit()'>Provjeri</a>
    </div>
</form>


<script>       
    function aKontoSubmit() {

        $.ajax({          
            type: "GET",            
            URL: "/api/Akontas/GetAKONTA",
            data: { id: $('#AkontasId').val() },
            contentType: "data/xml; charset=utf-8",  
            success: function (result) {
                window.location.href = "http://localhost:57285/api/Akontas/" + $('#AkontasId').val();
            },
            error: function () {
                alert("Ne postoji AKONTO pod tim rednim brojem");
            }
        });
    }
</script>

我可以推荐一些注意事项:

1)尝试在http://localhost:57285/api/使用https 我遇到了类似的问题,但是在IIS上却没有,我正在使用Kestrel Web服务器。

2)在设置基地址之后和GetAsync()之前尝试以下操作:

client.DefaultRequestHeaders.Clear();

//Define request data format    
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM