我有一個簡單的Azure工作者角色,我想在其中託管Web API。我想設置Web API控制器,以便可以像訪問jQuery一樣訪問它們,這樣我就不必創建shell類,並且我的Web API可以保持靈活性,以便將來可以與jQuery一起使用。Web API - 來自C#客戶端的jQuery樣式發佈
問:如何在不使用shell類的情況下從C#客戶端發佈到工作角色中的自承載Web API控制器?
我在它在常規ASP.NET項目的託管過去使用Web API的工作,我能夠通過jQuery訪問它做這樣的事情:
//Web API Controller
public class TestController : ApiController
{
public void Post(string item, string action)
{
//...
}
}
//jQuery
$.post("/api/test/", { item: "myItem", action: "someAction" }, function (data)
{
//...
}
對於我的工作人員角色項目,我按照Host ASP.NET Web API 2 in an Azure Worker Role的ASP.NET說明設置了WebAPI。我希望能夠以同樣的方式從C#客戶端訪問控制器。但是,有關Calling a Web API from a .NET Client的ASP.NET文檔使用類,而不是單個變量。代碼示例最終看起來如下所示。編輯:我已經能夠成功地使用這種方法來溝通數據的工作者角色。
//Shell Object
public class ShellObject
{
public string item;
public string action
}
//Web API Controller
public class TestController : ApiController
{
public void Post(ShellObject shellObject)
{
//Unpack object, then do action
//...
}
}
//C# Client
ShellObject shellObject = new ShellObject() { item = "myItem", action = "someAction" }
var response = await client.PostAsync("api/test/", shellObject);
因爲我不想創建我的代碼中多處不必要的貝殼類,我想這樣做以下。這樣做也保持了我的Web API的靈活性,以便將來可以從基於Web的jQuery項目中使用它(在我的情況下,這是一個非常可能的場景)。但是,這些方法不起作用;該服務器返回一個「方法不允許」或該帖子只是掛起。此外,這些帖子似乎並沒有在小提琴手中出現。編輯:此外,因爲這是一個通用的服務器,所以Worker角色和調用的C#客戶端可能處於不同的解決方案,因此他們不能共享類定義。另外,只要不需要shell類,就可以在發佈之前序列化爲JSON。
//Web API Controller
public class TestController : ApiController
{
public void Post(string item, string action)
{
//...
}
}
//Simple Post
using (var wb = new WebClient())
{
var data = new NameValueCollection();
data["item"] = "myItem";
data["action"] = "myAction";
var response = wb.UploadValues("http://workerroleaddress/api/test/", "POST", data);
}
問:我如何從一個C#的客戶端上傳到工人的角色自託管的Web API控制器,無需使用貝殼類?
更新了匿名類型的序列化解決方案並提出了其他序列化方法。 – Juliano
您是否正在嘗試使用test.myapi.com或您自己的api? – Juliano
當我僅使用字符串而不是序列化時,它在我以前的編輯中工作過嗎? – Juliano