【问题标题】:angularjs 1 api routing errorangularjs 1 api路由错误
【发布时间】:2023-03-10 03:36:01
【问题描述】:

我在这个项目中使用 angular 1。并遇到 405(不允许的方法)错误:

我的 Api 如下所示:

[HttpPut]
[Authorize]
[Route("api/License/Update")]
public bool Update(LicenseViewModel licenseViewModel)
{
}

这是用 licenseViewModel 的模型更新数据库 但我的路由去了:http://localhost/IRIS.Api6/api/License/Update?id=69499 这给了我错误。 405(不允许的方法)

在我的服务中,我有

angular.module('portal.core.resources.license')
   .factory('License', ['$resource', 'authSettings', function ($resource, 
   authSettings) {
'use strict';

var License = $resource(
    authSettings.apiServiceBaseUri + 'api/License/:id',
    {
         id: '@licenseSeq'
    },
    {
        update:
        {
            method: 'PUT',
            url: authSettings.apiServiceBaseUri + 'api/License/Update/' 
        },

        licenseTypes: {
            method: 'GET',
            url: authSettings.apiServiceBaseUri + 'api/License/types',
            isArray: true
        },

        licenseStatuses: {
            method: 'GET',
            url: authSettings.apiServiceBaseUri + 'api/License/statuses',
            isArray: true
        },

        funeralServicesAdminFees: {
            method: 'GET',
            url: authSettings.apiServiceBaseUri + 'api/License/:id/FuneralServiceAdminFees',
            isArray: true   
        }
    }
);

....

我做错了什么?谢谢。

【问题讨论】:

  • 你注意到你的更新方法参数和你传递的参数了吗?
  • 它应该以 licenseViewModel 的形式提供数据,而不是错误地提供了:params: id:69130,导致 angula XHR 加载失败:PUT "localhost/IRIS.Api6/api/License/Update?id=69130"。
  • 谢谢,Sumit raj,我注意到数据是从 API 作为 licenseViewModel 获取的,在修改电话号码后,它旨在提供回更新 api 以更新数据库条目。但是,由于错误,它从未到达 api。

标签: c# angularjs api swagger


【解决方案1】:

我没有使用 angular,但这是我在简单的 javascript 中所做的

 var postData = {
            UserID:@Model.UserID,
            BadgeID: $('#badgeID').val(),
            FirstName: $('#firstName').val(),
            LastName: $('#lastName').val(),
            Email: $('#email').val(),
            MobileNumber: $('#mobNo').intlTelInput("getNumber"),
            LanguagePreferenceID: $('#languagePreferences option:selected').val(),
            FacilityCode: $('#facilities option:selected').val(),
            IsPasswordResetAllowed: $('#passReset').is(':checked') ? true : false,
            ActivityStatus: $('#activityStatus').val()

        };




$.ajax({
                url: '/UserCRUD/UpdateUser',
                type: 'POST',
                data: JSON.stringify(postData),
                contentType: "application/json; charset=utf-8",
                dataType: "json"
});

这是我的控制器方法签名

[HttpPost]
    public ActionResult UpdateUser(UserViewModel user)
    {
    }

结论:需要传递所需的 LicenseViewModel 对象。

【讨论】:

  • Angular 1 传递数据模型非常不同。如果html模板中已经存在数据模型,则不需要再次组装数据模型。
  • 在控制器中,似乎 ctrl.license 数据模型是这样传递的: ctrl.save = function() { License.update(ctrl.license).$promise
猜你喜欢
  • 2017-08-24
  • 1970-01-01
  • 1970-01-01
  • 2015-02-25
  • 2017-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-23
相关资源
最近更新 更多