Asp.net mvc ASP.NET MVC API中的发布对象
我有一个MVC应用程序,它在一个简单的MVC4项目中包含一个web应用程序。 此外,我还有一个Windows应用程序,即在另一个Windows应用程序项目中对web应用程序的Windows执行 Windows应用程序使用MVC API,并通过resthelper类以TfsApiController的名称调用MVC Web应用程序控制器 除post方法外,所有方法都有效。我想将一个对象发布到tfsapi控制器 rest助手类的post方法: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
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 }
);