【问题标题】:Angular 2 http request is not hitting web api get method with a string parameter overloadAngular 2 http 请求没有通过字符串参数重载访问 web api get 方法
【发布时间】:2017-02-24 15:48:52
【问题描述】:

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

由于它有一个字符串参数,我难道不希望我的 this 达到第二个(字符串重载)方法吗?如何让它达到第二个(字符串重载)方法?

这是我在 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);
}

【问题讨论】:

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


    【解决方案1】:

    试试这个,

    [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[]);
    }
    

    从浏览器测试的 URL: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);
    }
    

    如果你不想重写上面的方法,那么你需要改变这个函数的Attribute路由,

    [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

    【讨论】:

    • 我收到类型搜索“{term: string}”类型的 ${term} 参数的语法错误不能分配类型“RequestOptionArgs”的对象文字可能指定已知参数,您确定这是你用的是什么?
    • 其实搞定了,只需要+'${term}'而不是+${term}。我要编辑你的答案。谢谢你的帮助!!!
    • 一个问题是它也覆盖了这个函数... public IHttpActionResult Get(int id) { var testelement = testelements.FirstOrDefault((p) => p.id == id); if (testelement == null) { return NotFound(); } 返回确定(测试元素); }
    猜你喜欢
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    相关资源
    最近更新 更多