0

シンプルなmvc 4 プロジェクトに Web アプリケーションを含むMVC アプリケーションがあります。さらに、私はWindows アプリケーションを持っています。これは、他の Windows アプリケーション プロジェクトでの Web アプリケーションの Windows 実行です。

Windows アプリケーションはMVC APIを使用し、resthelper クラスによって TfsApiController という名前で MVC Web アプリケーション コントローラーを呼び出します。

post メソッドを除くすべてのメソッドが機能しています。オブジェクトを tfsapi コントローラーに投稿したいと考えています。

残りのヘルパー クラスの 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 not found が表示されます。

于 2013-02-21T17:20:50.990 に答える