私のWebAPI2コントローラーのルートが必要です

ジョン・アダムズ

XMLを返す単純なWebApi2コントローラーがありますが、定義したルーティングで別のメソッドを適切に追加できません。

namespace CBMI.WebAPIservice.Controllers
{
public class MarkersController : ApiController
{
    public HttpResponseMessage Get(int? id)
    {
        int i = id.HasValue ? id.Value : 0;
        XmlDocument docContent = GetXmlDataFromDB(i);
        return new HttpResponseMessage
        {
            Content = new StringContent(docContent.InnerXml.ToString(), Encoding.UTF8, "application/xml")
        };
    }
    public HttpResponseMessage GetGrantsIS()
    {
        XmlDocument docContent = GetXmlDataFromDB();
        return new HttpResponseMessage
        {
            Content = new StringContent(docContent.InnerXml.ToString(), Encoding.UTF8, "application/xml")
        };

    }
    public XmlDocument GetXmlDataFromDB()
    {
        string connStr = System.Convert.ToString(
                System.Web.Compilation.ConnectionStringsExpressionBuilder.GetConnectionString("MDWConnectionString"),
                System.Globalization.CultureInfo.CurrentCulture);
        SqlConnection conn = new SqlConnection(connStr);
        SqlCommand sqlCmd = new SqlCommand("dbo.FLAS_List_GrantLocationsByAmount_V1", conn);
        sqlCmd.CommandType = System.Data.CommandType.StoredProcedure;
        conn.Open();
        XmlDocument xmlDoc = new XmlDocument();
        XmlReader xmlReader = sqlCmd.ExecuteXmlReader();
        if (xmlReader.Read())
            xmlDoc.Load(xmlReader);
        conn.Close();
        return xmlDoc;
    }
    public XmlDocument GetXmlDataFromDB(int worldAreaID )
    {
        string scrambleAward = ""; 
        string connStr = System.Convert.ToString(
                System.Web.Compilation.ConnectionStringsExpressionBuilder.GetConnectionString("MDWConnectionString"),
                System.Globalization.CultureInfo.CurrentCulture);
        SqlConnection conn = new SqlConnection(connStr);
        SqlCommand sqlCmd = new SqlCommand("dbo.FLAS_List_Awards_V1", conn);
        sqlCmd.CommandType = System.Data.CommandType.StoredProcedure;
        sqlCmd.Parameters.AddWithValue("@AreaID", worldAreaID);
        sqlCmd.Parameters.AddWithValue("@Scramble", scrambleAward);
        conn.Open();
        XmlDocument xmlDoc = new XmlDocument();
        XmlReader xmlReader = sqlCmd.ExecuteXmlReader();
        if (xmlReader.Read())
            xmlDoc.Load(xmlReader);
        conn.Close();
        return xmlDoc;
    }

}

}

WebApiConfig.cs

namespace CBMI.WebAPIservice.App_Start
{
//  This code file defines the delegate where you should put your Web API configuration code.

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute
            (
                name: "WebApi2",
                routeTemplate: "api/{controller}/{id}"
            );
        config.Routes.MapHttpRoute
            (
                name: "ApiGrantsIS",
                routeTemplate: "api/{controller}/{action}"
            );
    } 
}

}

GetGrantsISメソッドが呼び出されるようアクションを認識するようにルーティングを変更する方法がわかりません代わりに、次のURLで参照してください

CBMI.WebAPIservice/api/markers/GetGrantsIS

idに値がないことを認識するGetメソッドにルーティングします。その後、デフォルトで値0になり、機能しますが、このURLでGetGrantsISメソッドを呼び出す必要があります。

編集:属性ルーティングを追加しようとすると、新しいエラーが発生します

私は次のように装飾しました:

    [Route("api/{controller}/GetGrantsIS")]
    public HttpResponseMessage GetGrantsIS()

そして今、私はこれを手に入れます:

Server Error in '/CBMI.WebAPIservice' Application.

A direct route cannot use the parameter 'controller'. Specify a literal path in place of this parameter to create a route to a controller.

Woot

Web Api 2はRESTアーキテクチャを優先します。つまり、アクションがGET、POST、PUT、DELETEであることが期待されます。

ただし、属性ルーティングを使用して目的の結果を得ることができます

属性ルーティングを使用したい場合は、WebApiConfigファイルにその設定がすでにあります。したがって、次のようにRoute属性を使用するようにコードを変更する必要があります。

[Route("api/markers/getgrantsis")]
public HttpResponseMessage GetGrantsIS()
{
  XmlDocument docContent = GetXmlDataFromDB();
  return new HttpResponseMessage
  {
    Content = new StringContent(docContent.InnerXml.ToString(), Encoding.UTF8, "application/xml")
   };

}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

2つのプロジェクトのWebapi2コントローラー

分類Dev

WebApi2コントローラーでヘッダー値を取得する

分類Dev

webapi2コントローラーから403を返す

分類Dev

Json.NETを使用するWebApi2コントローラーが単一のプロパティの逆シリアル化に失敗する

分類Dev

複数のパラメーターをangularJsコントローラーからWebAPI2に渡す

分類Dev

WebApi2コントローラーのPostメソッドは常にnullのFromBodyを受信します

分類Dev

WebAPI2コントローラーが呼び出されたときの404

分類Dev

WebApi2属性ルーティング継承コントローラー

分類Dev

角度のあるhttp.postの値が正しいのに、asp webAPI2コントローラーでobj値がnullになる理由

分類Dev

Webapi2コントローラーでFirebaseトークン認証を使用する方法

分類Dev

リテラルセグメントのWebAPI2ルーティングが失敗する

分類Dev

DateTime値をWebAPI2コントローラーにPOSTする方法

分類Dev

MVCプロジェクトでWebAPI2コントローラーをヒットできません

分類Dev

AngularにはRouteProviderのコントローラーが必要です

分類Dev

Get in WebApi2のルートを構成できません

分類Dev

複数のコレクションパラメータでWebAPI2コントローラを適切にオーバーロードするにはどうすればよいですか?

分類Dev

KnockoutJS + WebAPI2トークン認証-トークンの有効期限が切れるまでログイン状態を維持します

分類Dev

Unityを使用してWebAPI2コントローラーにDBContextを挿入できません

分類Dev

Angularjsにルートを実装するために複数のコントローラーが必要ですか?

分類Dev

MIMEマルチパートコンテンツをWebAPI2にPOSTする

分類Dev

ヘッダー値を使用したWebAPI2コントローラーメソッドの単体テスト

分類Dev

laravelすべてのテーブルにモデルとコントローラーが必要ですか?

分類Dev

MVCルート構成のないWebApi2ルーティングが機能していません

分類Dev

私のJavascript / HTMLトラフィックライトシーケンスにはループが必要です

分類Dev

WebAPIコントローラーからサブドメインへのリダイレクト-CORSが必要ですか?

分類Dev

Laravelのモデルごとに個別のコントローラーが必要ですか?

分類Dev

私のコントローラーは404ページでエラーが発生しています

分類Dev

Angularjs + springブート(2つの異なるコントローラーが必要)

分類Dev

ルート属性とクエリパラメータを使用する場合のWebapi2のSwaggerドキュメント

Related 関連記事

  1. 1

    2つのプロジェクトのWebapi2コントローラー

  2. 2

    WebApi2コントローラーでヘッダー値を取得する

  3. 3

    webapi2コントローラーから403を返す

  4. 4

    Json.NETを使用するWebApi2コントローラーが単一のプロパティの逆シリアル化に失敗する

  5. 5

    複数のパラメーターをangularJsコントローラーからWebAPI2に渡す

  6. 6

    WebApi2コントローラーのPostメソッドは常にnullのFromBodyを受信します

  7. 7

    WebAPI2コントローラーが呼び出されたときの404

  8. 8

    WebApi2属性ルーティング継承コントローラー

  9. 9

    角度のあるhttp.postの値が正しいのに、asp webAPI2コントローラーでobj値がnullになる理由

  10. 10

    Webapi2コントローラーでFirebaseトークン認証を使用する方法

  11. 11

    リテラルセグメントのWebAPI2ルーティングが失敗する

  12. 12

    DateTime値をWebAPI2コントローラーにPOSTする方法

  13. 13

    MVCプロジェクトでWebAPI2コントローラーをヒットできません

  14. 14

    AngularにはRouteProviderのコントローラーが必要です

  15. 15

    Get in WebApi2のルートを構成できません

  16. 16

    複数のコレクションパラメータでWebAPI2コントローラを適切にオーバーロードするにはどうすればよいですか?

  17. 17

    KnockoutJS + WebAPI2トークン認証-トークンの有効期限が切れるまでログイン状態を維持します

  18. 18

    Unityを使用してWebAPI2コントローラーにDBContextを挿入できません

  19. 19

    Angularjsにルートを実装するために複数のコントローラーが必要ですか?

  20. 20

    MIMEマルチパートコンテンツをWebAPI2にPOSTする

  21. 21

    ヘッダー値を使用したWebAPI2コントローラーメソッドの単体テスト

  22. 22

    laravelすべてのテーブルにモデルとコントローラーが必要ですか?

  23. 23

    MVCルート構成のないWebApi2ルーティングが機能していません

  24. 24

    私のJavascript / HTMLトラフィックライトシーケンスにはループが必要です

  25. 25

    WebAPIコントローラーからサブドメインへのリダイレクト-CORSが必要ですか?

  26. 26

    Laravelのモデルごとに個別のコントローラーが必要ですか?

  27. 27

    私のコントローラーは404ページでエラーが発生しています

  28. 28

    Angularjs + springブート(2つの異なるコントローラーが必要)

  29. 29

    ルート属性とクエリパラメータを使用する場合のWebapi2のSwaggerドキュメント

ホットタグ

アーカイブ