C# 从MVC项目调用Web APi

C# 从MVC项目调用Web APi,c#,asp.net-mvc,oracle,asp.net-web-api,ado.net-entity-data-model,C#,Asp.net Mvc,Oracle,Asp.net Web Api,Ado.net Entity Data Model,我使用C#ASP.NET MVC中的Oracle数据库和ADO.NET实体模型创建了Web API,一切正常。 现在,我需要创建另一个项目来调用这个API。 我创建它是因为这个Web API是应用程序的一部分,它将连接到另一个应用程序。 我在控制器中创建了一个新的MVC项目 public ActionResult GetAkontas() { IEnumerable<AkontasViewModel> akontas = null;

我使用C#ASP.NET MVC中的
Oracle数据库
ADO.NET实体模型
创建了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);

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

更新

这是我的WebAPI项目

控制器

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

    }
}
使用System.Linq;
使用System.Web.Http;
使用System.Web.Http.Description;
命名空间AkontasWebApi.Controllers
{
公共类AkontasController:ApicController
{
//我的目标是在克洛兹巴祖监狱
public AkontasEntities db=新的AkontasEntities();
//获取:api/Akontas
//我认为,在维扎诺地区,这是一个非常重要的问题
[HttpGet]
[路线(“api/Akontas”)]
公共IQueryable GetAKONTAS()
{
返回db.AKONTAS;
}
//获取:api/Akontas/5->ovo-je路由tacnije putanja kako se koristi ova funkcija
//我很高兴见到你
[HttpGet]
[响应类型(类型(AKONTA))]
公共IHttpActionResult GetAKONTA(字符串id)
{
AKONTA-AKONTA=db.AKONTAS.Find(id);
if(aKONTA==null)
{
返回请求(“Ne postoji A_KONTO pod tim rednim brojem”);
}
返回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>


阿_KONTO 普罗夫杰里 函数aKontoSubmit(){ $.ajax({ 键入:“获取”, URL:“/api/Akontas/GetAKONTA”, 数据:{id:$('#AkontasId').val()}, contentType:“数据/xml;字符集=utf-8”, 成功:功能(结果){ window.location.href=”http://localhost:57285/api/Akontas/“+$('#AkontasId').val(); }, 错误:函数(){ 警报(“Ne postoji Akoto pod tim rednim brojem”); } }); }
我可以推荐一些需要注意的东西:

1) 尝试在
http://localhost:57285/api/
。我也有过类似的问题,但不是在IIS上,我使用的是kestrel web服务器

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


我有点困惑。您显示的代码是来自您的MVC项目还是来自您的Web API项目?来自我的MVC项目对不起,我也将添加我的Web API项目代码。当我有另一个问题时,我就忘了;你到底有什么问题?API没有返回数据,或者是来自client.GetAsync(…)的状态代码从来都不是成功的状态代码…不,我只是没有获取数据。浏览器正在运行,但我没有得到任何结果
<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>
client.DefaultRequestHeaders.Clear();

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