Angular 2 http请求没有使用字符串参数重载来访问web api get方法

时间:2017-02-24 15:48:53

标签: c# rest angular asp.net-web-api asp.net-web-api2

我的问题是从这个http请求中调用了第一个Get方法: http://localhost:56690/api/testelements/?name=aeg

我不希望我的这个打到第二个(字符串重载)方法,因为它有一个字符串参数?如何让它达到第二个(字符串重载)方法?

这是我在c#

中的web api控制器
// GET api/<controller>
public IEnumerable<TestElement> Get()
{
    return testelements;
}

// GET api/<controller>/searchString
//[HttpGet, Route("api/testelements/{name=name}")]
public IEnumerable<TestElement> Get(string searchString)
{
    return Array.FindAll(testelements, s => s.name.Contains(searchString));
}

对于我的角度服务我有这个打字稿代码

search(term: string): Observable<testelement[]> {
    return this.http
               .get(`api/testelements/?name=${term}`)
               .map(response => response.json() as testelement[]);
}

我的WepApiConfig.cs

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();

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

我不希望它覆盖此功能!:

public IHttpActionResult Get(int id)
{
    var testelement = testelements.FirstOrDefault((p) => p.id == id);
    if (testelement == null)
    {
        return NotFound();
    }
    return Ok(testelement);
}

1 个答案:

答案 0 :(得分:2)

试试这个,

[HttpGet, Route("api/testelements/{searchString}")]
public IEnumerable<TestElement> Get(string searchString)
{
    return Array.FindAll(testelements, s => s.name.Contains(searchString));
}


search(term: string): Observable<testelement[]> {
    return this.http
               .get(`api/testelements/` + ${term}) //append your search term at end of your Url.
               .map(response => response.json() as testelement[]);
}

要从浏览器进行测试的网址:http:yourUrl/api/testelements/123

  

<强>更新

     

我不希望它覆盖此功能!:

public IHttpActionResult Get(int id)
{
    var testelement = testelements.FirstOrDefault((p) => p.id == id);
    if (testelement == null)
    {
        return NotFound();
    }
    return Ok(testelement);
}

如果您不想覆盖上述方法,则需要更改此功能的属性路由,

[HttpGet, Route("api/test/{searchString}")] // previous route [HttpGet, Route("api/testelements/{searchString}")]   
public IEnumerable<TestElement> Get(string searchString)
{
    return Array.FindAll(testelements, s => s.name.Contains(searchString));
}

如果您需要有关路由的更多信息,请Check this out