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,
};
}
}
}
-
possible duplicate of Redirect from asp.net web api post actionJamie Dixon– Jamie Dixon2013年10月10日 11:31:13 +00:00Commented Oct 10, 2013 at 11:31
-
stackoverflow.com/questions/1549324/…Eren– Eren2013年10月10日 11:36:36 +00:00Commented Oct 10, 2013 at 11:36
3 Answers 3
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;
}
2 Comments
HttpStatusCode.Redirect
is a temporary redirect. HttpStatusCode.Moved
indicates the redirect is permanent.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");
Comments
Set the Headers.Location
property in your HttpResponseMessage
instead.