So routen Sie zwischen zwei verschiedenen Aktionsmethoden mit denselben Parametern


Usman Farooq

Ich entwickle ASP.NET Web API 2 mit Attribut-Routing. Ich habe eine Controller-Klasse und zwei Aktionsmethoden:

[RoutePrefix("api/settings")]
    public class SettingsController : ApiController
    {
        [Route("{getVersion}")]
        public async Task<IHttpActionResult> GetDBVersion(string PlatformID)
        {
            try
            {
                JavaScriptSerializer serializer = new JavaScriptSerializer();
                SqlManager sqlManager = new SqlManager();
                DataTable dt = sqlManager.GetLocalDBVersion(PlatformID);

                List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
                Dictionary<string, object> row;
                foreach (DataRow dr in dt.Rows)
                {
                    row = new Dictionary<string, object>();
                    foreach (DataColumn col in dt.Columns)
                    {
                        row.Add(col.ColumnName, dr[col]);
                    }
                    rows.Add(row);
                }
                return Ok(serializer.Serialize(rows));
            }
            catch (Exception ex)
            {
                return Content(HttpStatusCode.ExpectationFailed, ex.Message);
            }
        }
        [Route("getBookingSetting/{PlatformID:int}")]
        public async Task<IHttpActionResult> GetDBBookingSetting(int PlatformID)
        {
            try
            {
                JavaScriptSerializer serializer = new JavaScriptSerializer();
                SqlManager sqlManager = new SqlManager();
                DataTable dt = sqlManager.GetBookingSetting(PlatformID.ToString());

                List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
                Dictionary<string, object> row;
                foreach (DataRow dr in dt.Rows)
                {
                    row = new Dictionary<string, object>();
                    foreach (DataColumn col in dt.Columns)
                    {
                        row.Add(col.ColumnName, dr[col]);
                    }
                    rows.Add(row);
                }
                return Ok(serializer.Serialize(rows));
            }
            catch (Exception ex)
            {
                return Content(HttpStatusCode.ExpectationFailed, ex.Message);
            }
        }

Ich rufe die erste Aktionsmethode per URL auf:

/api/settings/getVersion?PlatformID=1

und zweite von:

/api/settings/getBookingSetting?PlatformID=1

In beiden Fällen wird jedoch jedes Mal die erste Aktionsmethode aufgerufen. Wie kann ich zwischen solchen Fällen routen, in denen Methodennamen unterschiedlich sind, Parameter jedoch denselben Namen und Typ (oder unterschiedliche Typen) haben?

John

Ihre Routendefinitionen stimmen nicht mit Ihren URLs überein:

[Route("{getVersion}")]

Dies erwartet einen Routenparameter "getVersion", sodass auch URLs wie /api/settings/1übereinstimmen. Sie sollten es neu schreiben, damit es kein Parameter ist:

[Route("getVersion")]
public async Task<IHttpActionResult> GetDBVersion([FromUri]string PlatformID)

Nächster:

[Route("getBookingSetting/{PlatformID:int}")]

Diese Definition wird PlatformIDals Teil der Route (dh /api/settings/getBookingSetting/1) erwartet , aber Sie übergeben sie als Abfragezeichenfolge.

Sie sollten die Definition folgendermaßen ändern:

[Route("getBookingSetting")]
public async Task<IHttpActionResult> GetDBBookingSetting([FromUri]int PlatformID)

Verwandte Artikel


Definieren Sie zwei Variablen mit denselben Parametern

Boris Kozarac Gibt es eine Möglichkeit, zwei Variablen mit denselben Parametern zu definieren, damit ich den Code nicht wiederholen muss? var owl_first = $('.owl-carousel-first'); var owl_second = $('.owl-carousel-second'); Dies wird nur für beide wiederhol

So planen Sie DAG mit verschiedenen Parametern

Alica Bellchi Ich habe ein Szenario, in dem ich einen Airflow-DAG mit verschiedenen Parametern basierend auf Planungskriterien planen muss. For instance, I've to: Schedule DAG on Monday and Tuesday with the variable "source" as "process_usa" Schedule DAG ever

So verwenden Sie Werte zwischen verschiedenen Express-Routen

Ashish Ich bin neu bei Express und schreibe eine Anwendung in Knoten js. Ich habe ein Problem bei der Verwendung der gleichen Parameter. Mein Code ist: app.get('/signin', function (req, res) { renderView(req, res, 'signin.jade'); }); app.get('/config', func