[HttpOptions] 用於获得自URI的资源在Request/Response过程可使用的功能选项。
,跟HTTP Head有点类似但差异在於会回传Body内文,属於HTTP请求中的Preflight Request (预检请求)类型。
主要使用情境跟时机在於client端再进行请求资源之前可先做提前检查来判定要做何种措施,
可对ajax跨域请求Cross-Origin Resource Sharing (CORS)做一些提前检查。
由於Preflight Request (预检请求)再请求发送时候符合的语法格式如下
Access-Control-Allow-Methods: <method>, <method>, ...
或
Access-Control-Allow-Methods: *
举例:
Access-Control-Allow-Methods: POST, GET, OPTIONS
需要先至Startup.cs做一些程序调整,来启用Api Server-Side的Options功能。
首先需要引入Microsoft.AspNetCore.Http 命名空间
using Microsoft.AspNetCore.Http;
接着至Startup.cs中的Configure() method去对UseStaticFiles()做程序微调
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
//启用静态资源可存取性
app.UseStaticFiles(new StaticFileOptions()
{
OnPrepareResponse = _context =>
{
_context.Context.Response.Headers.Append("Access-Control-Allow-Methods", "GET,POST");
}
});
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
我们在Response Header增加自定义的Key-Value Pair
允许HTTP透过GET、POST来请求
在TeacherController.cs中去增加option 的action method
[HttpOptions("check")]
public string CheckServer()
{
return "from Server message";
}
接着一样新增一html页面来模拟client-side 呼叫
OptionsTeacher.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Options测试</title>
<script src="jquery/jquery.min.js"></script>
</head>
<body>
<div>
<input type="button" id="btnOptions" value="options call" />
<span id="msg"></span>
</div>
<script type="text/javascript">
$("#btnOptions").click(function () {
$.ajax({
//请求模式
type: "options",
//请求的URL
url: "api/Teacher/check",
success: function (result, status, xhr) {
$("#msg").html(result);
}
});
});
</script>
</body>
</html>
这里在执行第一次页面GET请求时会发现
Network这增加一些额外Header资讯
之前的其他页
options这一页
可以发现Request跟Response Header都有增加一些额外资讯
送出请求後
Ref:
Preflight request
https://developer.mozilla.org/en-US/docs/Glossary/Preflight_request
Access-Control-Allow-Headers
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers
Access-Control-Allow-Methods
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Methods
HTTP headers | Access-Control-Allow-Methods
https://www.geeksforgeeks.org/http-headers-access-control-allow-methods/
本文同步发表至个人部落格
https://coolmandiary.blogspot.com/2021/09/net-core-web-api07httpoptions.html
>>: Day-6 老玩家在新电视的怀旧神器、FrameMeister XRGB-mini
前言 觉得这个文章,花了太多时间在写但有些设定好像应该 更把他分的更清楚而不是一直只丢范例出来解释。...
字元 电脑中的字元其实是由整数数字表示,就像是每一个字元都有一个属於自己的编号, 用 printf(...
小回顾 Day01 - 缘起:怎麽了?为什麽?如何掌握过於自由的程序码? 以订单、RPG 角色的移动...
打了这麽多的技术文,突然发现我好像都没有介绍到资安的基础,所以最後的这 3 篇文章可能就是做个资安的...
Instance Lifecycle 生命周期 介绍完怎麽建立Vue instance 後,接着来谈...