将请求重定向到另一个路由

时间:2015-01-06 09:06:06

标签: asp.net asp.net-web-api

我有一个名为Asp.net Web Api的{​​{1}}方法,根据收到的参数,可以PublishCreate

可以将请求重定向到另一个api方法吗? (包含所有请求数据和请求标头 - 因此模型绑定自动生效)

注意:我不想返回Update回复。我只是想在内部重定向动作。

HttpStatusCode.Moved

2 个答案:

答案 0 :(得分:0)

我想你可以在这里写下你的逻辑:

 if (Request.Headers.Contains("X-Product-Code"))
        {
            // redirect request to Update
        }
        else
        {
            // redirect request to Create
        }

像:

 if (Request.Headers.Contains("X-Product-Code"))
        {
            // 1) Create UpdateViewModel model = new UpdateViewModel(); 
            // set data
            // 2) Call Create(model)
        }
        else
        {
            // 1) Create CreateViewModel model = new CreateViewModel (); 
            // set data
            // 2) Call Update(model)
        }

答案 1 :(得分:0)

控制器操作和模型绑定用于将HTTP请求映射到代码入口点 - 如果需要从另一个调用一个控制器操作,则表明您做错了。

在这种情况下,最好使用统一的视图模型并将逻辑抽象为服务。

在下面的示例中,我已将这些方法中的任何代码移动到单独的类(ProductsService),以便可以从两个控制器操作轻松地调用它。如果您需要进行模型验证,设置cookie或其他内容,您可以在控制器内部的私有方法中执行此操作,同样,您可以从这两个操作中调用:

public class ProductsController : ApiController
{
    private readonly ProductsService _service = new ProductsService();

    public void Publish(CreateOrUpdateViewModel model)
    {
        if (Request.Headers.Contains("X-Product-Code"))
        {
            _service.Create(Mapper.MapProduct(model));
        }
        else
        {
            _service.Update(Mapper.MapProduct(model));
        }
    }

    public void Update(CreateOrUpdateViewModel model)
    {
        _service.Update(Mapper.MapProduct(model));
    }

    // etc.
}