【问题标题】:Call Web APi from MVC Project从 MVC 项目调用 Web APi
【发布时间】:2019-09-16 08:43:30
【问题描述】:

我在 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 的项目

更新

这是我的 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>

【问题讨论】:

  • 我有点困惑。您显示的代码是来自您的 MVC 项目还是来自您的 Web API 项目?
  • 来自我的 MVC 项目
  • 对不起,我也会添加我的 Web API 项目代码。我忘记了
  • 那我还有一个问题;你的问题到底是什么? API 是否没有返回数据,或者来自client.GetAsync(...) 的状态码永远不会是成功状态码...
  • 不,我只是没有获取数据。浏览器正在运行,但我没有得到任何结果

标签: c# asp.net-mvc oracle asp.net-web-api ado.net-entity-data-model


【解决方案1】:

我可以推荐一些需要注意的东西:

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"));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    相关资源
    最近更新 更多