如何将数据从Mvc控制器传递到WebApi控制器?

时间:2019-03-11 08:37:36

标签: c# asp.net-mvc asp.net-web-api

在将其标记为重复的人之前,我已经检查了这些问题

Passing data from a WebApi Controller to an MVC Controller

ASP.Net MVC How to pass data from view to controller

与MVC一起工作了大约6个月之后,我试图进入asp.net WebApi世界,但是我仍然不知道何时以及在正常的MVC应用程序中使用WebApi的正确方法是什么。如果有人知道任何好的文档或一些好的教程,将不胜感激。

无论如何,我尝试使用WebAPI制作MVC应用程序时,都有一个包含2个项目“ mvcApplication”和“ myWebApiApplication”的解决方案。我为两个项目都运行了该解决方案,并且测试了这样的GET请求,并且该请求有效:

MVC索引控制器

public ActionResult Index()
{
    IEnumerable<mvcStudentModel> empList;
    HttpResponseMessage response = GlobalVariables.webApiClient.GetAsync("Students").Result;
    empList = response.Content.ReadAsAsync<IEnumerable<mvcStudentModel>>().Result;
    return View(empList);
}

WebAPi控制器

public class StudentsController : ApiController
{
    private StudentsDBEntities db = new StudentsDBEntities();

    // GET: api/Students
    [Route("api/Studentst")]
    [HttpGet]
    public IQueryable<Student> Students()
    {
        return db.Students;
    }

然后我添加了一个ListView模板,并且一切正常。

现在我不知道我是否正确地执行了此操作,但是我试图将一个新的学生插入到学生表(ID,名称)中。

因此,我尝试使用提交按钮在索引视图1文本字段中添加

@Html.BeginForm("AddStudent", "Index"){ 
    <input type="text" name="username" placeholder="Student name" />
    <button type="submit" class="btn btn-warning">
}

当我按下“提交”按钮时,它会触发“ AddStudent”方法控制器:

public  ActionResult isAvailable(string username)
{
    // What code should I put here to pass data to WebApi
}

让我们假设我可以通过POST请求调用WebApi方法来添加学生,我将其添加到了WebApi控制器中:

[Route("api/AddNewStudent")]
[HttpPost]
public IQueryable<Student> check(string name)
{
    var test = db.Students.Where(a => a.StudentName.Equals(name)).FirstOrDefault();
    if (test!=null)
    {
        // add Student code
    }
}

但是在那之后我不知道该怎么做(我的意思是首先我想将数据从MVC控制器传递到WebApi控制器,以将学生添加到WebApi控制器中),并且我创建了StudentModel用于在需要时传递数据。

很抱歉,问题很长,谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

这个问题有多个答案。 为什么要从MVC应用程序调用Web API? 它们都是不同解决方案的一部分还是属于同一解决方案?

string apiUrl = "http://localhost:12408/api/Studentst";

            using (HttpClient client=new HttpClient())
        {
            client.BaseAddress = new Uri(apiUrl);
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new 
System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

            HttpResponseMessage response = await client.GetAsync(apiUrl);
            if (response.IsSuccessStatusCode)
            {
                var data = await response.Content.ReadAsStringAsync();
                var student = 
Newtonsoft.Json.JsonConvert.DeserializeObject<[QualifiedNamespace].Student>(data);
            }
        }

以以下内容开头的最简单的教程之一:https://www.tutorialsteacher.com/webapi/consume-web-api-get-method-in-aspnet-mvc

我将始终参考MSDN文档,因为它将具有最新,最准确的信息。