gpt4 book ai didi

asp.net-web-api - 为什么我的 IExceptionHandler 实现没有返回错误响应?

转载 作者:行者123 更新时间:2023-12-02 03:22:24 28 4
gpt4 key购买 nike

我正在使用 ASP.NET 和 F# 构建 Web API。我有一个 IExceptionHandler 的实现。

type DefaultExceptionHandler() =

let mapExceptionTypetoHttpStatusCode (ex:Exception) : HttpStatusCode =
match ex with
| :? ArgumentException -> HttpStatusCode.BadRequest
| _ -> HttpStatusCode.InternalServerError

interface IExceptionHandler with
member x.HandleAsync (context:ExceptionHandlerContext, cancellationToken:CancellationToken) =
let request = context.Request
let ex = context.Exception
let httpStatusCode = mapExceptionTypetoHttpStatusCode ex

context.Result <- { new IHttpActionResult with member x.ExecuteAsync(token:CancellationToken) = Task.FromResult(request.CreateErrorResponse(httpStatusCode, ex)) }
Task.FromResult(0) :> Task

它在启动时注册。

type Global() =
inherit System.Web.HttpApplication()

static member RegisterWebApi(config: HttpConfiguration) =
// Configure routing
config.MapHttpAttributeRoutes()
config.Routes.MapHttpRoute(
"DefaultApi", // Route name
"api/{controller}/{id}", // URL with parameters
{ controller = "{controller}"; id = RouteParameter.Optional } // Parameter defaults
) |> ignore


config.Services.Replace(typeof<IExceptionHandler>, new DefaultExceptionHandler())

member x.Application_Start() =
GlobalConfiguration.Configure(Action<_> Global.RegisterWebApi)

我可以调试并看到代码被遍历,但是返回的响应不是处理程序中设置的响应。我确信我忽略了一些简单的事情,并且不会触发编译器错误,但到目前为止我还无法确定问题。我是否没有正确设置 context.Result

希望 F# 大师中的一位能够立即看到我的错误。感谢您花时间阅读本文。

最佳答案

好吧,*问题*变得(令人尴尬)简单,我将其发布在这里,以防其他人在使用 F# Web API 模板作为学习机制时遇到类似问题。

这是由于对模板的误解而引起的。由于当前存在,模板按照约定使用位于项目根目录中的 index.html 文件来传递响应。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Car List App</title>
<link href="./Content/bootstrap.min.css" rel="stylesheet">
<link href="./Content/Site.css" rel="stylesheet">
</head>
<body>
<div class="container">
<h2 class="sub-header">All Cars</h2>
<table id="cars" class="table">
<thead>
<tr>
<td>#</td>
<td>Make</td>
<td>Model</td>
</tr>
</thead>
<tbody />
</table>
</div>
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.0.3.min.js"></script>
<script src="./Scripts/main.js"></script>

index.html 中调用的一些 JavaScript 是实际执行对 Controller 的调用的内容。

$(function () {
var uri = 'api/cars';

$.getJSON(uri)
.done(function (data) {
$.each(data, function (key, item) {
$('<tr><td>' + (key + 1) + '</td><td>' + item.make + '</td><td>' + item.model + '</td></tr>')
.appendTo($('#cars tbody'));
});
});
});

由于 JS 期望对象具有上述属性,因此当它收到错误响应时,它会忽略它并显示空的 index.html 页面。

菜鸟,错误。希望这可以节省某人几分钟的生命。

关于asp.net-web-api - 为什么我的 IExceptionHandler 实现没有返回错误响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36697300/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com