Мобильные службы Azure UpdateAsync выдает ошибку 404 - PullRequest
0 голосов
/ 23 июня 2019

Я работаю над формами xamarin и использую мобильные сервисы Azure. Когда я пытаюсь обновить запись, UpdateAsync не работает и выдает ошибку 404.

Во время отладки я заметил следующую строку отладчика:

<b> Requested URL: </b>/tables/Customer/10k<br><br>

10k - это идентификатор.

Когда я использую почтальон со ссылкой выше, он возвращает ту же ошибку 404. Однако, если я использовал ссылку /tables/Customer?id=10k, она работает в почтальоне.

Это сообщение об ошибке от VS.

Microsoft.WindowsAzure.MobileServices.MobileServiceInvalidOperationException: <!DOCTYPE html>
        <html>
            <head>
                <title>The resource cannot be found.</title>
                <meta name="viewport" content="width=device-width" />
            </head>

            <body bgcolor="white">

                    <span><H1>Server Error in '/' Application.<hr width=100% size=1 color=silver></H1>

                    <h2> <i>The resource cannot be found.</i> </h2></span>

                    <font face="Arial, Helvetica, Geneva, SunSans-Regular, sans-serif ">

                    <b> Description: </b>HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. &nbsp;Please review the following URL and make sure that it is spelled correctly.
                    <br><br>

                    <b> Requested URL: </b>/tables/Customer/10k<br><br>

                    <hr width=100% size=1 color=silver>

                    <b>Version Information:</b>&nbsp;Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.7.3282.0

                    </font>

            </body>
        </html>
        <!-- 
        [HttpException]: The controller for path &#39;/tables/Customer/10k&#39; was not found or does not implement IController.
           at System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType)
           at System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName)
           at System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory)
           at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state)
           at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state)
           at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData)
           at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
           at System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step)
           at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
        --><!--
        This error page might contain sensitive information because ASP.NET is configured to show verbose error messages using &lt;customErrors mode="Off"/&gt;. Consider using &lt;customErrors mode="On"/&gt; or &lt;customErrors mode="RemoteOnly"/&gt; in production environments.-->

1 Ответ

0 голосов
/ 23 июня 2019

Я нашел решение, но столкнулся с другой проблемой.

У меня была эта строка поверх контроллера клиента

[Route("tables/Customer")]

Я удалил его и отредактировал

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

к этому

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

но теперь, когда я обновляюсь с клиента, он выдает ошибку неверного запроса

Обновление

Я исправил ошибку неверного запроса. в моем клиентском классе бэкэнда у меня было datetime? и в моем классе клиента клиента у меня есть datetime .. я удалил? .

теперь я получаю внутреннюю ошибку сервера.

Обновление 2

В моей базе данных запись, которую я пытался обновить, содержала несколько пустых столбцов, я заполнил их, и теперь я снова получаю неверный запрос.

Обновление 3

Я получил это на работу. У меня было два первичных ключа в базе данных. Когда я вызвал UpdateAsync, я передал только один ключ в объекте. когда я сдал два ключа, это сработало.

Customer customer = new Customer
            {
                Id="10k", // first primary key
                CustomerId=12, // second primary key
                FirstName = FirstNamelbl.Text.ToString(),
                LastName = LastNamelbl.Text.ToString(),
                DOB = doblbl.Date,
                Email = Emaillbl.Text.ToString(),
                Sex = GenderGroup.SelectedItem.ToString()
            };
            // save customer input 
            await manager.UpdateCustomerRecordAsync(customer);

менеджер

public async Task UpdateCustomerRecordAsync(Customer customer)
        {
            try
            {
                await customerTable.UpdateAsync(customer);
            }
            catch (MobileServiceInvalidOperationException msioe)
            {
                Debug.WriteLine("Invalid sync operation: {0}", new[] { msioe.Message });

            }
            catch (Exception e)
            {
                Debug.WriteLine("Sync error: {0}", new[] { e.Message });
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...