我有一個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