我有一个 MVC应用程序,它包含一个简单的 mvc 4项目中的Web应用程序。 此外,我有一个 Windows应用程序,这是在其他Windows应用程序项目中的Web应用程序的Windows执行。
Windows应用程序使用 MVC API ,并通过resthelper类以TfsApiController的名称调用MVC Web应用程序控制器。
除了post方法之外,所有方法都有效。我想将一个对象发布到tfsapi控制器。
rest helper class的post方法:
public void Post(T targetObject)
{
if (targetObject == null)
{
throw new System.ArgumentNullException("targetObject");
}
//Get formatting details.
System.Net.Http.Formatting.MediaTypeFormatter myFormatter = new XmlMediaTypeFormatter();
myUrlSuffix = "api/tfsapi";
//Make the call.
var result = this.MainHttpClient.PostAsync(myUrlSuffix, targetObject, myFormatter).Result.Content.ReadAsAsync<T>().Result;
}
我的TfsApiController方法:
public void PostPreActivity(PreActivity preActivity)
{
}
路由:
RouteTable.Routes.MapHttpRoute(
name: "PostPreActivity",
routeTemplate: "api/tfsapi/Post",
defaults: new { id = RouteParameter.Optional }
).RouteHandler = new SessionRouteHandler();
我浪费了很多时间,但我不知道是什么问题。
更新:
这是我的所有工作路线:
RouteTable.Routes.MapHttpRoute(
name: "GetWorkItemsByProject",
routeTemplate: "api/{controller}/{action}/{projectID}",
defaults: new { controller = "tfsapi", action = "GetWorkItems", projectID = UrlParameter.Optional }
).RouteHandler = new SessionRouteHandler();;
RouteTable.Routes.MapHttpRoute(
name: "ActionWebApiRoute",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
).RouteHandler = new SessionRouteHandler();
RouteTable.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
).RouteHandler = new SessionRouteHandler();
答案 0 :(得分:0)
您的路线似乎不正确,请将其更改为如下所示,然后重试:
config.Routes.MapHttpRoute(
name: "TfsApiRoute",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
顺便问一下,你在使用SessionRouteHandler做什么?
[上述更新后更新]
您需要更改以下代码才能完全包含操作名称: myUrlSuffix =“api / tfsapi / PostPreActivity ”;
我认为这是因为根据您更新的路线,当'api / tfsapi'这样的请求到来时,它会尝试与名为“GetWorkItemsByProject”的第一条路线匹配,因为'action'不是可选的在这里,你可能看到404找不到。