programing

ID에 마침표가 포함 된 경우 ApiController가 404를 반환합니다.

itsource 2021. 1. 15. 08:11
반응형

ID에 마침표가 포함 된 경우 ApiController가 404를 반환합니다.


ApiController가 있고 이메일 주소를 요청의 ID 매개 변수로 사용하고 싶습니다.

// GET api/employees/email@address.com
public CompactEmployee Get(string id) {
   var email = id;
   return GetEmployeeByEmail(email);
}

그러나이 작업을 수행 할 수 없습니다 ( 404 반환 ).

http://localhost:1080/api/employees/employee@company.com

다음은 모두 작동합니다.

  • http://localhost:1080/api/employees/employee@company
  • http://localhost:1080/api/employees/employee@company.
  • http://localhost:1080/api/employees?id=employee@company.com

Phil Haack에 의해 자세히 설명 된relaxedUrlToFileSystemMapping="true" 대로 web.config에 설정 했습니다 .

나는 전체 이메일 주소가 작동하는 것을 매우 좋아하지만 마침표 뒤에 다른 문자가 올 때마다 요청은 404를 반환합니다. 어떤 도움이라도 대단히 감사하겠습니다!

해결책

다른 옵션이 없기 때문에 Maggie가 제안한 방향으로 가서이 질문의 답변 을 사용하여 URL에 이메일이 필요할 때 자동으로 후행 슬래시를 추가하는 재 작성 규칙을 만들었습니다.

<system.webServer>
  ....   
  <rewrite>
    <rules>
      <rule name="Add trailing slash" stopProcessing="true">
        <match url="^(api/employees/.*\.[a-z]{2,4})$" />
        <action type="Rewrite" url="{R:1}/" />
      </rule>
    </rules>
  </rewrite>
</system.webServer>

후행 슬래시를 추가하면 시나리오에 적합합니까?

http://localhost:33021/api/employees/employee@company.com/

IIS 설정을 확인하십시오.

Home Directory -> Configuration

.aspx애플리케이션 확장을 편집하고 설정 Verify that file exists이 꺼져 있는지 확인하십시오 .

최신 정보

방금 기본 MVC4 Web API 프로젝트로 테스트했습니다.

URL : http://localhost:10983/api/values/cool@email.com

작업 ValuesController:

public string Get(string id)
{
    return id;
}

이것은 응답이었습니다.

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">cool@email.com</string>

이것은 나를 위해 일한 것입니다.

targetFramework = 4.6.1에서 실행 중이었습니다. 4.6.2로 업그레이드하고 web.config에 추가했습니다.

<system.web>
        <customErrors mode="Off"/>
        <compilation debug="true" targetFramework="4.6.2"/>
        <!-- This will allow to search for stuff that contains . & etc.-->
        <httpRuntime targetFramework="4.6.2" maxRequestLength="100000" maxUrlLength="2048" relaxedUrlToFileSystemMapping="true" requestPathInvalidCharacters=""/>
  </system.web>

requestPathInvalidCharacters=""물론, 인코딩 된 형태로, 등 URI처럼 물건을 가질 수있을 것입니다.

참조 URL : https://stackoverflow.com/questions/13298542/apicontroller-returns-404-when-id-contains-period

반응형