ほとんどのホストされたサイトで Put と Delete を使用できないため、これらの使用を回避するルートを作成しようとしていますが、それを機能させることはできません..
こんなルートが欲しい
api/someController/Add/someInt
このRESTsharpコードで
private RestClient client;
public RESTful()
{
client = new RestClient
{
CookieContainer = new CookieContainer(),
BaseUrl = "http://localhost:6564/api/",
//BaseUrl = "http://localhost:21688/api/",
//BaseUrl = "http://madsskipper.dk/api/"
};
}
public void AddFriend(int userId)
{
client.Authenticator = GetAuth();
RestRequest request = new RestRequest(Method.POST)
{
RequestFormat = DataFormat.Json,
Resource = "Friends/Add/{userId}"
};
request.AddParameter("userId", userId);
client.PostAsync(request, (response, ds) =>
{
});
}
FriendsController でこのメソッドをヒットするには
// POST /api/friends/add/Id
[HttpPost] //Is this necesary?
public void Add(int id)
{
}
だから私は私のルート設定にこれを追加しました
routes.MapHttpRoute(
name: "ApiAdd",
routeTemplate: "api/{controller}/Add/{id}",
defaults: new { id = RouteParameter.Optional }
);
しかし、これを行うと、Add メソッドではなく、FriensController のコンストラクターのみをヒットします。
編集:
また、このルート構成を作成してみました
routes.MapHttpRoute(
name: "ApiAdd",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { action = "Add", id = RouteParameter.Optional }
);
しかし、同じ結果、コントローラーはヒットしますが、アクションはヒットしません
解決策: パラメータが RESTsharp で間違って追加されていることが判明したため、代わりに
RestRequest request = new RestRequest(Method.POST)
{
RequestFormat = DataFormat.Json,
Resource = "Friends/Add/{userId}"
};
request.AddParameter("userId", userId);
そのはず
RestRequest request = new RestRequest(Method.POST)
{
RequestFormat = DataFormat.Json,
Resource = "Friends/Add/{userId}"
};
request.AddUrlSegment("userId", userId.ToString());