简体   繁体   中英

Redirect to new url C# MVC with HttpResponse.Redirect

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,
            };
        }
    }
}

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;
}

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");

Headers.LocationHttpResponseMessage设置Headers.Location属性。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM