【发布时间】:2021-06-29 00:34:44
【问题描述】:
我正在构建一个 Web API,我想通过 MVC 视图使用它。 API 控制器用于插入用户数据,MVC 控制器用于创建视图。我一直在寻找信息,这就是我能够利用这些信息做的事情。
因此,API 控制器只是通过存储过程将数据插入数据库,我已经使用 Postman 进行了测试并且工作正常:
[Route("api/[controller]")]
[ApiController]
public class UserController : ControllerBase
{
[HttpPost]
public IActionResult post(Models.Request.UserModel model)
{
using (Models.AdminOrchardContext db = new Models.AdminOrchardContext())
{
Models.UserModel oUsuar = new Models.UserModel();
Models.OrchardTable tOrchard = new Models.OrchardTable();
oUsuar.Name = model.Name;
oUsuar.Email = model.Email;
tOrchard.OrchardLocation = model.OrchardLocation;
var uName = new SqlParameter("@name", oUsuar.Name);
var uEmail = new SqlParameter("@email", oUsuar.Email);
var hOrchardLocation = new SqlParameter("@OrchardLocation", tOrchard.OrchardLocation);
var idUserReg = db.Usuarios.FromSqlRaw("Exec UserAndOrchardInsert @name, @email" +
"@OrchardLocation",
new[] { uName, uEmail, hOrchardLocation});
db.SaveChanges();
}
return Ok();
}
}
添加视图的 MVC 控制器,从这里 API 与视图上的用户数据一起使用:
[HttpPost]
public IActionResult post(Models.Request.User model)
{
HttpClient hc = new HttpClient();
hc.BaseAddress = new Uri("https://localhost:44325/api/User");
var addRecToDB = hc.PostAsJsonAsync<Models.Request.User>("User", model);
addRecToDB.Wait();
ViewBag.message = "Ok!";
return View();
}
还有观点:
@model Huerbog.Models.Request.User
@{
ViewData["Title"] = "post";
}
<h1>User registration</h1>
<hr />
<div class="row">
<div class="col-md-4">
<form asp-action="post">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="Name" class="control-label"></label>
<input asp-for="Name" class="form-control" />
<span asp-validation-for="Name" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Email" class="control-label"></label>
<input asp-for="Email" class="form-control" />
<span asp-validation-for="Email" class="text-danger"></span>
</div>
<h4>Orchard-related field</h4>
<div class="form-group">
<label asp-for="OrchardLocation" class="control-label"></label>
<input asp-for="OrchardLocation" class="form-control" />
<span asp-validation-for="OrchardLocation" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" />
</div>
</form>
</div>
<h4>@ViewBag.message</h4>
</div>
<div>
<a asp-action="Index">Back to List</a>
</div>
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
现在,问题是当我打开视图时,即使 API 正在运行,页面上也会出现错误 405,我不知道错误是什么或在哪里。
【问题讨论】:
-
您是否调试过 MVC 控制器并检查 API 的响应?
-
你有一个 get 操作来返回视图吗?
标签: sql-server asp.net-mvc asp.net-core asp.net-core-webapi asp.net-core-5.0