Как вызвать метод контроллера с несколькими параметрами в веб-интерфейсе asp.net? - PullRequest
0 голосов
/ 09 июня 2018

У меня есть web api 2 с именем контроллера sendSms.Вот код контроллера sendSms:

 public class sendSmsController : Controller
    {    
        public string Get(string id, string pass)
        {
            return id + pass;
        }
    }

Я хочу вызвать этот метод из браузера.Вот конфигурация маршрутов:

public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

            routes.MapHttpRoute(name: "api", routeTemplate: "api/{sendSms}/{id}/{pass}", defaults: new { });
        }

и вот как я называю этот API:

http://localhost:8979/api/sendSms?id=1&pass=2

, но это дает мне ошибку сервера (ресурс не найден).Может ли кто-нибудь помочь мне разобраться с этим?

1 Ответ

0 голосов
/ 09 июня 2018

Вам нужно больше узнать о маршрутизации.Это ключевой момент вашего веб-приложения.На данный момент есть 2 решения:

Способ обычной маршрутизации:

WebApiConfig.cs:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );

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

SendSmsController.cs:

public class SendSmsController : Controller
{
    public string Get(string id, string pass)
    {
        return id + pass;
    }
}

Способ маршрутизации атрибутов:

WebApiConfig.cs:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapHttpAttributeRoutes();

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );

}

SendSmsController.cs:

[RoutePrefix("api/sendSms")]
public class SendSmsController : Controller
{
    [Route]    
    public string Get(string id, string pass)
    {
        return id + pass;
    }
}
...