Asp.net mvc ASP.NET MVC API中的发布对象

Asp.net mvc ASP.NET MVC API中的发布对象,asp.net-mvc,asp.net-web-api,asp.net-mvc-routing,asp.net-web-api-routing,Asp.net Mvc,Asp.net Web Api,Asp.net Mvc Routing,Asp.net Web Api Routing,我有一个MVC应用程序,它在一个简单的MVC4项目中包含一个web应用程序。 此外,我还有一个Windows应用程序,即在另一个Windows应用程序项目中对web应用程序的Windows执行 Windows应用程序使用MVC API,并通过resthelper类以TfsApiController的名称调用MVC Web应用程序控制器 除post方法外,所有方法都有效。我想将一个对象发布到tfsapi控制器 rest助手类的post方法: public void Post(T targetObj

我有一个MVC应用程序,它在一个简单的MVC4项目中包含一个web应用程序。 此外,我还有一个Windows应用程序,即在另一个Windows应用程序项目中对web应用程序的Windows执行

Windows应用程序使用MVC API,并通过resthelper类以TfsApiController的名称调用MVC Web应用程序控制器

除post方法外,所有方法都有效。我想将一个对象发布到tfsapi控制器

rest助手类的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;
}
路线:

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();

您的路线似乎不正确,请将其更改为以下内容,然后重试:

config.Routes.MapHttpRoute(
            name: "TfsApiRoute",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
顺便问一下,您使用SessionRouteHandler的目的是什么

[在上述更新后更新

您需要更改以下代码以完全包含操作名称: myUrlSuffix=“api/tfsapi/后反应性


我相信这是因为根据您更新的路由,当出现像“api/tfsapi”这样的请求时,会尝试将其与名为“GetWorkItemsByProject”的第一个路由匹配,并且由于“action”在这里不是可选的,您可能会看到404找不到

感谢您的帮助,但此路由是我的默认路由。我已经更新了帖子。我已经根据你的路由更新更新了上面的帖子。让我知道这是否有帮助。
config.Routes.MapHttpRoute(
            name: "TfsApiRoute",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );