2014-01-24 1 views
0

У меня есть пчелы, проходящие через различные MVC tutorials, а также сделанные простые. Все они, похоже, обращаются к двум типам uri. Что делать, если мы хотим использовать что-то другое, кроме «контроллера» и «id»?Можем ли мы создать пользовательский uri для вызова различных функций метода контроллера

также как он узнает, какая функция называется? УИР является /api/products но функция, которая возвращает значение является public IEnumerable<Product> GetAllProducts()

Ниже приведен пример контроллера

using ProductsApp.Models; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Web.Http; 

namespace ProductsApp.Controllers 
{ 
    public class ProductsController : ApiController 
    { 
     Product[] products = new Product[] 
     { 
      new Product { Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1 }, 
      new Product { Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M }, 
      new Product { Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M } 
     }; 

     public IEnumerable<Product> GetAllProducts() 
     { 
      return products; 
     } 

     public IHttpActionResult GetProduct(int id) 
     { 
      var product = products.FirstOrDefault((p) => p.Id == id); 
      if (product == null) 
      { 
       return NotFound(); 
      } 
      return Ok(product); 
     } 
} 

В этом случае я могу назвать только две функции в веб-браузере

enter image description here

Я хочу позвонить в Ури, что-то по линии

/api/products/foo

+0

являются U известно, что вы пишете API, а не веб-приложение? –

+1

ASP.NET MVC отличается от WebForms, потому что он согласуется с конфигурацией. Если вы выполняете настраиваемую маршрутизацию, вы уходите от этого соглашения, что в некоторых случаях не рекомендуется. В любом случае, стандартным соглашением MVC является/[ControllerClass- "Controller"]/FunctionName/FunctionParameterValue или/[ControllerClass- "Controller"]/FunctionName? FunctionParameter = FunctionParameterValue. Есть ли причина, по которой вы используете настраиваемую маршрутизацию? Многие люди делают это по уважительной причине. Просто убедитесь, что ваша причина оправдана. –

ответ

2

Вы можете использовать Route Prefixes и Route атрибуты acceive его, как показано ниже:

[RoutePrefix("api/products")] 
public class ProductsController : ApiController 
{ 
    [Route("foo")] 
    [Route("")] 
    public IEnumerable<Product> GetAllProducts(){} 
} 

Тогда вы можете позвонить /api/products/foo o r /api/products, оба они дают вам одинаковый результат.

Для получения более подробной информации о Web Api Attribute Routing, обратите внимание на следующую ссылку: http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2

2

Вы должны о маршрутизации в ASP.NET MVC. Маршрутизация позволяет вам установить свои пользовательские правила определения того, какие URL-адреса должны указывать на какие действия (и контроллеры).

Вы можете узнать больше о маршрутизации, например. здесь:

1

изменить это

public IEnumerable<Product> GetAllProducts() 
    { 
     return products; 
    } 

в

public IEnumerable<Product> Foo() 
    { 
     return products; 
    } 
Смежные вопросы