0

我有一个MVC 应用程序,它在一个简单的mvc 4 项目中包含一个 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;
}

我的 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();
4

1 回答 1

0

您的路线似乎不正确,将其更改为如下所示,然后重试:

config.Routes.MapHttpRoute(
            name: "TfsApiRoute",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

顺便说一句,您使用 SessionRouteHandler 做什么?

[以上帖子更新后更新]

您需要更改以下代码以完全包含操作名称: myUrlSuffix = "api/tfsapi/ PostPreActivity ";

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

于 2013-02-21T17:20:50.990 回答