2014-02-05 4 views
1

бит из ASP.NET MVC нуб, я пытаюсь передать строку в качестве аргумента для моего контроллера Web API:Неверный запрос?

public class ValuesController : ApiController 
{ 
    // GET api/values 
    public IEnumerable<string> Get() 
    { 
     return new string[] { "value1", "value2" }; 
    } 

    // GET api/values/5 
    public string Get(int id) 
    { 
     return "value"; 
    } 

    public string Get(string arg) 
    { 
     return "othervalue"; 
    } 

} 

Я попытался добавить еще один маршрут:

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

Так Я хочу сохранить оба метода Get и использовать параметр Get с параметром arg, чтобы я мог передавать строку. Так что, когда я пытаюсь ударить этот адрес «апите/значение/jjhjh» в моем браузере я получаю эту ошибку:

The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.String Get(Int32)' in 'stackOverflowWebApi.Controllers.ValuesController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter. 
+1

Можете ли вы показать, как вы пытаетесь передать строку, ссылку? –

+0

Вы пробовали сделать идентификатор нулевой? – aw04

+1

Маршрут, который вы показываете, относится к 'Routeconfig', вы можете показать нам свой' WebApiconfig' – Nilesh

ответ

1

Дополнительный маршрута вы добавили был маршрут MVC, не WebAPI маршрута. Маршруты WebAPI по умолчанию не расположены в RouteConfig.cs, они находятся в WebApiConfig.cs. Они выглядят так:

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

Ошибка, о которой вы писали, происходит из-за отсутствия каких-либо данных. Дайте это попробовать вместо:

public string Get(string id = null) 
{ 
    return "othervalue"; 
} 

Обратите внимание, что имя параметра id, не arg, чтобы он соответствовал необязательный параметр маршрута. Кроме того, по умолчанию его значение null указывает связующему, что его можно вызвать этот метод, когда данные не передаются.

Смежные вопросы