【发布时间】:2014-07-01 23:15:33
【问题描述】:
我有一个简单的 Azure 辅助角色,我想在其中托管 Web API。我想设置 Web API 控制器,这样我就可以像访问 jQuery 帖子一样访问它们,这样我就不必创建 shell 类,并且我的 Web API 可以保持灵活,以便将来与 jQuery 一起使用。
问:如何在不使用 shell 类的情况下,从 C# 客户端发布到作为辅助角色的自托管 Web API 控制器?
我过去使用过 Web API,它托管在常规 ASP.NET 项目中,我可以通过 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);
因为我不想在我的代码中的多个位置创建不必要的 shell 类,所以我想做如下的事情。这样做还可以使我的 Web API 保持灵活性,以便将来可以从基于 Web 的 jQuery 项目中使用它(在我的情况下这是一个非常可能的场景)。但是,这些方法不起作用;服务器返回“不允许的方法”或帖子挂起。此外,这些帖子似乎没有出现在 Fiddler 中。编辑:此外,因为这是一个通用服务器,所以工作角色和调用 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);
}
问:如何在不使用 shell 类的情况下,从 C# 客户端发布到作为辅助角色的自托管 Web API 控制器?
【问题讨论】:
标签: c# jquery asp.net azure asp.net-web-api