我有一个名为Asp.net Web Api
的{{1}}方法,根据收到的参数,可以Publish
或Create
。
可以将请求重定向到另一个api方法吗? (包含所有请求数据和请求标头 - 因此模型绑定自动生效)
注意:我不想返回Update
回复。我只是想在内部重定向动作。
HttpStatusCode.Moved
答案 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.
}