[英]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.