8

我正在努力使用这种HttpResponse.Redirect方法。我以为它会被包括在内,System.Web但我得到了

当前上下文中不存在名称“响应””错误。

这是整个控制器:

using System.Net;
using System.Net.Http;
using System.Text;
using System.Web;
using System.Web.Http;

namespace MvcApplication1.Controllers
{
    public class SmileyController : ApiController
    {
        public HttpResponseMessage Get(string id)
        {
            Response.Redirect("http://www.google.com");
            return new HttpResponseMessage
            {
                Content = new StringContent("[]", new UTF8Encoding(), "application/json"),
                StatusCode = HttpStatusCode.NotFound,
            };
        }
    }
}
4

3 回答 3

23

您可以使用以下行在您的操作方法中获取当前请求的 HttpResponse 对象:

HttpContext.Current.Response

所以你可以写:

HttpContext.Current.Response.Redirect("http://www.google.com");  

无论如何,您使用 HttpResponseMessage,所以正确的重定向方法是这样的:

public HttpResponseMessage Get(string id)
{
    // Your logic here before redirection

    var response = Request.CreateResponse(HttpStatusCode.Moved);
    response.Headers.Location = new Uri("http://www.google.com");
    return response;
}
于 2013-10-10T11:42:26.857 回答
1

在 MVC Web 应用程序控制器中,访问响应的方式与访问 aspx 页面的方式不同。您需要通过当前的 http 上下文访问它。

HttpContext.Current.Response.Redirect("http://www.google.com");
于 2013-10-10T11:34:45.393 回答
0

Headers.Location改为在您的属性中设置HttpResponseMessage

于 2013-10-10T11:34:45.827 回答