我有一个C#MVC web应用程序。 我有2个控制器。每个人都有返回HttpResponseMessage这一行的方法:调用不同的控制器,但保存请求?
return Request.CreateResponse(<StatusCode>, <value>);
我需要在控制器2是方法2将调用方法1在控制器1,得到它的响应,并使用它来创建自己的反应。于是我在控制器2的方法2创建控制器1,比调用它的方法1 -
// Controler 1
[InitializeSimpleMembership]
public class ItemsController : ApiController, IDisposable
{
Service1 m_s1;
Service2 m_s2;
Service3 m_s3;
Service4 m_s4;
// Controler 1 constructor
public ItemsController (Service1 s1, Service2 s2, Service3 s3, Service4 s4)
{
m_s1 = s1;
m_s2 = s2;
m_s3 = s3;
m_s4 = s4;
}
// Controler 1 Method1
[AllowAnonymous]
[HttpPost]
public HttpResponseMessage Method1(IEnumerable<Item> items)
{
List<Item> items2 = new List<Item>();
// ...
if (...)
{
return Request.CreateResponse(HttpStatusCode.OK, items2);
}
else
{
return Request.CreateResponse(HttpStatusCode.InternalServerError, errorList);
}
}
}
// Controler 2
[InitializeSimpleMembership]
public class CarsController : ApiController, IDisposable
{
Service1 m_s1;
Service4 m_s4;
Service5 m_s5;
// Controler 2 Constructor
public CarsController(Service1 s1, Service4 s4, Service5 s5)
{
m_s1 = s1;
m_s4 = s4;
m_s5 = s5;
}
// Controler 2 method2
[AllowAnonymous]
[HttpPost]
public HttpResponseMessage Method2(Car car)
{
// ...
Service2 s2 = new Service2();
Service3 s3 = new Service3();
ItemsController itemsController = new ItemsController (m_s1, s2, s3, m_s4);
HttpResponseMessage response = itemsController.Method1(items);
List<Item> items2;
response.TryGetContentValue<List<Item>>(out items2);
return Request.CreateResponse(HttpStatusCode.OK, items2);
}
}
的问题是,当我创建控制器1(上述ItemsController)这样的 - 它没有“请求”(它为空)。 于是,我就发送这样的请求 -
[AllowAnonymous]
[HttpPost]
public HttpResponseMessage Method1_Shell(IEnumerable<Item> items, HttpRequestMessage request)
{
if (Request == null)
{
Request = request;
}
return Method1(items);
}
但我不知道是否有更好的方法来做到这一点。
是的,但我会采取了很多的工作,保时间,我不能做到这一点,现在,只有在未来。我需要处理现有的情况。 (我不是我的老板:)) – TamarG
@TamarG我不熟悉你的情况,但是通过查看你提供的代码示例,我可以说'CarsController'中的代码与'ItemsController'非常耦合。因此,将来很难做出进一步的改变,它可能会让你的老板信服): –
这不是我真正的代码,当然,我改变了代码和名称,尽可能地将其作为一般数据,只在这里复制我需要这个例子。在我的代码中 - 每个控制器在每种方法中都有很多方法和一个长代码...... :) – TamarG