1. ホーム
  2. c#

[解決済み] MVC Web API 2 で api/people/STAFF.45287 などのリクエストにドット文字「.

2022-05-18 02:12:26

質問

私が動作させようとしているURLは、次のようなスタイルのものです。 http://somedomain.com/api/people/staff.33311 (ちょうど LAST.FM のようなサイトが RESTFul & WebPage の URL にあらゆる種類の記号を許可しているように、例えば " http://www.last.fm/artist/psy'aviah "はLAST.FMの有効なURLです)。

動作するのは以下のシナリオです。 - http://somedomain.com/api/people/ - これはすべての人を返します。 - http://somedomain.com/api/people/staff33311 - も同様に動作しますが、これは私が求めているものではありません。 私はURLは、以下の例のように、"ドット"を受け入れるようにしたいと思います。 - http://somedomain.com/api/people/staff.33311 - しかし、これは私に

HTTP Error 404.0 - Not Found
The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.

以下のように設定しました。

  1. コントローラ "PeopleController"。

    public IEnumerable<Person> GetAllPeople()
    {
        return _people;
    }
    
    public IHttpActionResult GetPerson(string id)
    {
        var person = _people.FirstOrDefault(p => p.Id.ToLower().Equals(id.ToLower()));
        if (person == null)
            return NotFound();
    
        return Ok(person);
    }    
    
    
  2. WebApiConfig.csは

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

私はすでにこのブログ記事のすべてのヒントに従って試してみました。 http://www.hanselman.com/blog/ExperimentsInWackinessAllowingPercentsAnglebracketsAndOtherNaughtyThingsInTheASPNETIISRequestURL.aspx を試してみましたが、まだうまくいきません...。また、かなり面倒だと思うので、もっと良い、安全な他の方法はないのでしょうか。

私たちは内部的にこのように ID を持っているので、何らかの方法でドットに適合するソリューションを見つけなければなりません。できれば "." のスタイルで、しかし必要であれば、URL の代替案も受け付けます...

どのように解決するのですか?

以下の設定を web.config ファイルに以下の設定をすることで、問題を解決できるはずです。

<configuration>
    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true" />