8

I am struggling with the HttpResponse.Redirect method. I thought it would be included in System.Web but I am getting the

The name 'Response' does not exist in the current context" error.

This is the entire controller:

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,
            };
        }
    }
}
Roman Marusyk
  • 23,328
  • 24
  • 73
  • 116
Niko
  • 251
  • 3
  • 6
  • 17
  • possible duplicate of [Redirect from asp.net web api post action](http://stackoverflow.com/questions/11324711/redirect-from-asp-net-web-api-post-action) – Jamie Dixon Oct 10 '13 at 11:31
  • http://stackoverflow.com/questions/1549324/net-mvc-redirect-to-external-url – Eren Oct 10 '13 at 11:36

3 Answers3

23

You can get HttpResponse object for current request in Your action method using the following line:

HttpContext.Current.Response

and so You can write:

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

Anyway, You use HttpResponseMessage, so the proper way to redirect would be like this:

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;
}
Aleksei Chepovoi
  • 3,915
  • 8
  • 39
  • 77
1

In an MVC web application controller, Response isn't accessed in the same way as it would be from an aspx page. You need to access it through the current http context.

HttpContext.Current.Response.Redirect("http://www.google.com");
Tom Bowers
  • 4,951
  • 3
  • 30
  • 43
0

Set the Headers.Location property in your HttpResponseMessage instead.

Roman Marusyk
  • 23,328
  • 24
  • 73
  • 116
Natan
  • 4,686
  • 5
  • 30
  • 48