【问题标题】:How to pass data from Mvc Controller to WebApi Controller?如何将数据从 Mvc 控制器传递到 WebApi 控制器?
【发布时间】:2019-03-11 08:37:36
【问题描述】:

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

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用于在需要时传递数据。

抱歉,问题太长了,感谢您的帮助。

【问题讨论】:

  • tutorialsteacher.com/webapi/… 在这里你可以找到很好的例子。
  • WebApi 控制器和 MVC 控制器是否在同一个项目中?
  • 没有 @ErikPhilips ,但它在同一个解决方案中
  • WebApi 控制器是否与 MVC 控制器在同一个 Project 中?

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


【解决方案1】:

这个问题的答案不止一个。 为什么要从 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 文档,因为它会包含最新和最准确的信息。

【讨论】:

  • 如果我从 MVC 应用程序调用的 AOI 仅在此应用程序中使用,我最好将代码移动到 MVC 控制器本身。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-21
  • 1970-01-01
  • 2015-09-16
  • 1970-01-01
  • 2015-12-28
相关资源
最近更新 更多