ASP.NET MVC API - Получить запись по электронной почте Id - PullRequest
0 голосов
/ 08 февраля 2019

То, что я хочу, это API, который принимает идентификатор электронной почты в качестве объекта запроса и проверяет, присутствует ли этот идентификатор электронной почты в базе данных или нет. Если идентификатор электронной почты присутствует, Api вернет true в качестве ответа, иначе false.

Что я сделал, это: -

Я определил один из маршрутов для Emaiid следующим образом: -

 config.Routes.MapHttpRoute(
         name: "ApiEmailId",
         routeTemplate: "api/{controller}/{action}/{email}",
         defaults: null,
        constraints: new { name = @"^([\w\-\.]+)@((\[([0-9]{1,3}\.){3}[0-9]{1,3}\])|(([\w\-]+\.)+)([a-zA-Z]{2,4}))+$" }
     );

Я также пробовал это: -

 config.Routes.MapHttpRoute(
         name: "ApiEmailId",
         routeTemplate: "api/{controller}/{action}/{email}",
         defaults: null,
        constraints: new { name = @"^[a-z]+$" }
     );

Также я написал actionresult следующим образом: -

 public IHttpActionResult GetEmailID(string email)
        {
            //New action condition
            //To get employee records
            var tblCountryName = from a in db.tblEmployeeRecords
                                 where a.userName == email
                                 select a;
            if (tblCountryName == null)
            {
                return NotFound();
            }

            return Ok(tblCountryName);
        }

Когда я нажимаю API, используя Почтальон: -
url: -

GET http://localhost/api/tblEmployeeRecords/GetEmailID/firstname.lastName@companyname.onmicrosoft.com

ошибкаЯ получаю: -

<h3>HTTP Error 404.0 - Not Found</h3>
                <h4>The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.</h4>
            </div>
            <div class="content-container">
                <fieldset>
                    <h4>Most likely causes:</h4>
                    <ul>
                        <li>The directory or file specified does not exist on the Web server.</li>
                        <li>The URL contains a typographical error.</li>
                        <li>A custom filter or module, such as URLScan, restricts access to the file.</li>
                    </ul>
                </fieldset>

Пожалуйста, помогите мне, Где я ошибаюсь, что будет решением для этого?

Ответы [ 3 ]

0 голосов
/ 08 февраля 2019

Пожалуйста, добавьте ваш номер порта API после localhost

Например:

GET http://localhost:your port number(56586)/api/tblEmployeeRecords/GetEmailID/firstname.lastName@companyname.onmicrosoft.com
0 голосов
/ 08 февраля 2019

есть три причины, по которым вы получите 404.

  1. вы отправляете запрос с неправильным URL
  2. сообщение, которое вы передаете в качестве параметра, не существует, и ваш метод контроллеравозвращает 404.
  3. в вашем адресе электронной почты есть символы, которые нарушают маршрут.

Итак, сначала проверьте, нажимаете ли вы на контроллер вообще.Поместите точку останова в первую строку в методе контроллера, снова вызовите вызов и посмотрите, ударили ли вы по нему.Если вы это сделаете, продолжайте отладку, чтобы увидеть, что происходит.

Если вы не нажмете метод контроллера, значит ваш маршрут неправильный.Чтобы разобраться в этом, поместите RoutePrefix в контроллер и атрибут Route в свой метод.Как только вы это сделаете, затем снова нажмите метод.

, чтобы ваш код мог выглядеть следующим образом:

[RoutePrefix("api/employeeRecords")] 
public class yourControllerName: ApiController 
//more controller code

[Route("GetEmailId/{email})"]
public IHttpActionResult GetEmailID(string email)
        {
            //start doing model validation. no point doing anything if the email passed in is empty ....

            if ( string.IsNullOrWhitespace(email) ) 
            {
                  //return something appropriate for your project
            }

            //New action condition
            //To get employee records
            var tblCountryName = from a in db.tblEmployeeRecords
                                 where a.userName == email
                                 select a;
            if (tblCountryName == null)
            {
                return NotFound();
            }

            return Ok(tblCountryName);
        }

с такой настройкой на месте ваш вызов становится:

GET http://localhost/api/employeeRecords/GetEmailID/urlencoded email

настройте этот URL, используя атрибуты, чтобы соответствовать любому, что вы хотите, и убедитесь, что вы вносите все необходимые изменения в свой объект config.Routes

UrlEncode адрес электронной почтыпрежде чем передать его в URL.

Если вам нужно узнать больше об этих вещах, тогда посмотрите здесь: https://docs.microsoft.com/en-us/aspnet/web-api/overview/web-api-routing-and-actions/create-a-rest-api-with-attribute-routing

0 голосов
/ 08 февраля 2019

Разрешено ли указывать точку в URL-адресе веб-интерфейса?

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

Вы можете получить дополнительную информацию о разрешении точки в URL-адресе в Символ точки '.'в MVC Web API 2 для запроса, например, api / people / STAFF.45287

...