Jon*_*Jon 3 asp.net-core-webapi
我有一个 WebAPI。如何返回并打开网页。例如,我想打开 CNN.com 页面。
[HttpGet]
public HttpResponseMessage Get()
{
//TODO: OPEN THE CNN.COM WEB PAGE
Run Code Online (Sandbox Code Playgroud)
我见过这样的例子:
try {
var response = Request.CreateResponse(HttpStatusCode.Redirect); // tried MOVED too
response.Headers.Location = new Uri("cnn.com");
return response;
} catch (Exception e) {
ErrorSignal.FromCurrentContext().Raise(e);
return Request.CreateResponse(HttpStatusCode.InternalServerError, e);
}
Run Code Online (Sandbox Code Playgroud)
但 Request.CreateResponse 不是 .Net Core 3 中的一个选项
有任何想法吗?提前谢谢
不要回来HttpResponseMessage。没有必要这样做,这只会让事情变得比需要的更复杂。相反,返回IActionResult:
[HttpGet]
public IActionResult Get()
{
return Redirect("https://cnn.com");
}
Run Code Online (Sandbox Code Playgroud)
我想你这里的逻辑更复杂,因为拥有一个除了重定向到完全不同的站点之外什么也不做的 API 端点是没有意义的。使用IActionResultas return 使您能够返回多种不同类型的结果。例如,您可以执行以下操作:
if (!ModelState.IsValid)
return BadRequest(ModelState);
// do something
return Ok();
Run Code Online (Sandbox Code Playgroud)
一般来说,重定向在 API 中没有多大意义,因为大多数与 API 交互的客户端不像 Web 浏览器那样工作。重定向实际上是一个完整的响应。Web 浏览器会自动跟踪Location响应标头中的 URL,因此对于最终用户来说是无缝的。但是,大多数瘦客户端默认情况下不会自动遵循重定向。使用 API 的程序员必须添加代码来检测是否发生了重定向,然后针对该新 URL 发出新请求。重定向到 CNN 主页之类的东西就更没有意义了,因为使用 API 的程序员实际上无法对响应进行任何处理。HttpClient例如,他们永远不会真正返回来自 like 的响应的 HTML ,因为如果不在 CNN.com 上实际托管,它就无法工作。我知道这可能是一个人为的例子,但总的来说值得一提。API 的响应应该是数据,而不是 HTML 之类的东西,因为在 API 上下文中接收 HTML 是没有意义的。
| 归档时间: |
|
| 查看次数: |
7962 次 |
| 最近记录: |