第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

WebApi:ID 之間不匹配

WebApi:ID 之間不匹配

C#
臨摹微笑 2023-08-13 09:22:13
鑒于以下路線/api/Person/15我們用 body 對(duì)這條路由執(zhí)行 PUT 操作:{    id: 8,    name: 'Joosh'}路線段值為 ,15但[FromBody]id 為8?,F(xiàn)在我們的控制器中有如下內(nèi)容:public Model Put(string id, [FromBody] Model model){     if (id != model.Id)         throw new Exception("Id mismatch!");     // ... Do normal stuff}是否有一個(gè)“默認(rèn)”或干燥的方法來(lái)執(zhí)行此操作,而不假設(shè)它總是像參數(shù) ID 和 Model.Id 屬性一樣簡(jiǎn)單?
查看完整描述

3 回答

?
侃侃無(wú)極

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊

您可以通過(guò)自定義模型驗(yàn)證來(lái)實(shí)現(xiàn)


[HttpPut("api/Person/{id}")]

public IActionResult Put(string id, [FromBody]Person person)

{

    // ... Do normal stuff

    return Ok();

}



public class Person

{

    [ValidateId]

    public string Id { get; set; }

    public string Name { get; set; }


}



public sealed class ValidateId : ValidationAttribute

{

    protected override ValidationResult IsValid(object id, ValidationContext validationContext)

    {

        var httpContextAccessor = (IHttpContextAccessor)validationContext.GetService(typeof(IHttpContextAccessor));

        var routeData = httpContextAccessor.HttpContext.GetRouteData();

        var idFromUrl = routeData.Values["id"];


        if (id.Equals(idFromUrl))

        {

            return ValidationResult.Success;

        }

        else

        {

            return new ValidationResult("Id mismatch!");

        }

    }

}



// In the Startup class add the IHttpContextAccessor


public void ConfigureServices(IServiceCollection services)

{

    // ...

    services.AddHttpContextAccessor();

    // ...

}


查看完整回答
反對(duì) 回復(fù) 2023-08-13
?
夢(mèng)里花落0921

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超6個(gè)贊

是否有一個(gè)“默認(rèn)”或干燥的方法來(lái)執(zhí)行此操作,而不假設(shè)它總是像參數(shù) ID 和 Model.Id 屬性一樣簡(jiǎn)單?


自定義驗(yàn)證邏輯可以在 ActionFilter 中實(shí)現(xiàn)。由于 ActionFilter 是在操作執(zhí)行中的模型綁定之后進(jìn)行處理的,因此可以在 ActionFilter 中使用模型和操作參數(shù),而無(wú)需從請(qǐng)求正文或 URL 中讀取。您可以參考下面的工作演示:


自定義驗(yàn)證過(guò)濾器


public class ValidationFilter: ActionFilterAttribute

{

 private readonly ILogger _logger;


public ValidationFilter(ILoggerFactory loggerFactory)

{

    _logger = loggerFactory.CreateLogger("ValidatePayloadTypeFilter");

}


public override void OnActionExecuting(ActionExecutingContext context)

{

    var carDto = context.ActionArguments["car"] as Car;


    var id = context.ActionArguments["id"];

    if (Convert.ToInt32(id)!=carDto.Id)

    {

        context.HttpContext.Response.StatusCode = 400;

        context.Result = new ContentResult()

        {

            Content = "Id mismatch!"

        };

        return;

    }


    base.OnActionExecuting(context);

 }

}

在ConfigureServices方法中注冊(cè)此操作過(guò)濾器


services.AddScoped<ValidationFilter>();

將此操作過(guò)濾器稱為服務(wù)


public class Car

{

   public int Id { get; set; }

   public string CarName { get; set; }

}


[ServiceFilter(typeof(ValidationFilter))]

[HttpPut("{id}")]

public Car Put(int id, [FromBody] Car car)

{

 // the stuff you want

}


查看完整回答
反對(duì) 回復(fù) 2023-08-13
?
素胚勾勒不出你

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超9個(gè)贊

您可以創(chuàng)建自己的 CustomValidation 并比較 id 和 model.id 的值。



查看完整回答
反對(duì) 回復(fù) 2023-08-13
  • 3 回答
  • 0 關(guān)注
  • 242 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)