gpt4 book ai didi

asp.net-mvc - 从 API 重定向

转载 作者:行者123 更新时间:2023-12-05 08:43:38 25 4
gpt4 key购买 nike

我正在努力学习/扩展我对 .NET MVC/REST/API 和 Web-sockets/SignalR 的了解。为此,我正在实现一个聊天应用程序。

我有一个典型的 MVC 介绍页面,它获取表单中的用户名和电子邮件地址,并且该数据被提交到一个 RESTFul API,新用户被添加到数据库中。

<form class="form-horizontal" role="form" action="/api/GroopsAPIUsers" method="POST">

在该页面的 Controller 内部(?)我将用户重定向到一个页面,他们可以在其中选择他们想要进入的房间。

public HttpResponseMessage  Post( GroopsUser userValue)
{
userValue.ID = Guid.NewGuid();
bool results = groopsRepository.AddNewUser(userValue);
// return results;

var response = Request.CreateResponse(HttpStatusCode.Redirect);

//from http://stackoverflow.com/questions/11324711/redirect-from-asp-net-web-api-post-action

string fullyQualifiedUrl = Request.RequestUri.GetLeftPart(UriPartial.Authority);
response.Headers.Location = new Uri (fullyQualifiedUrl + "/home/rooms/?userID=" + userValue.ID);

return response;

}

但这感觉不对。看起来 API 应该只执行 CRUD 操作,不应该与用户重定向到的页面有任何关系。

这是错误的做法吗?如果是这样,有人可以指出我正确的方向吗?(我不确定我是否正确使用了所有这些术语)

...格雷戈里

最佳答案

我明白为什么您认为这感觉不对。通常,您会以这种方式设计您的 Web API,使其与平台无关,因此它唯一关心的是传入的 HTTP 请求以及基于这些请求的操作。当您将请求重定向到另一个 URL 时,您是在围绕 Web 浏览器进行设计,从而将自己限制在那个平台上。有时这就是您所需要的,有时则不是。(如果它确实是您所需要的,那么您应该坚持使用常规的 Asp.NET MVC,而不是 Web Api)

您可以通过在成功操作后从您的 Controller 返回 200 状态代码等方式来使您的应用程序更加灵活,而不是您现在拥有的。这样,由客户端应用程序决定从那里做什么。 (这是您重定向的地方,如果您的客户端应用程序是基于浏览器的。)

那么您究竟是如何通过浏览器应用程序实现这一目标的呢?您可能已经猜到了,答案是 Javascript。您可以通过表单向您的 API 发出同步 POST 请求,而不必发出异步请求,然后等待来自服务器的响应。然后您可以根据响应包含的内容采取适当的操作。

一个简单的例子:

Controller

public HttpResponseMessage  Post(GroopsUser userValue)
{
userValue.ID = Guid.NewGuid();
bool results = groopsRepository.AddNewUser(userValue);

var response = Request.CreateResponse<GroopsUser>(HttpStatusCode.OK, userValue);

return response;
}

表格

<form class="form-horizontal" id="group-form" onsubmit="return addToGroup()" role="form" action="/api/GroopsAPIUsers" method="POST">

Javascript (jQuery)

<script>
function addToGroup()
{
$.ajax({
type: "POST",
url: $('#group-form').attr('action'),
data: $('#group-form').serialize(),
dataType: "json",
success: function(data) {
window.location.replace('/home/rooms/?userID=' + data.ID);
},
error: function(){
alert('error handing here');
}
});
return false;
}

</script>

如果有任何不清楚的地方,或者我弄错了什么,请告诉我!

关于asp.net-mvc - 从 API 重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25953768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com