首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

发布到IIS10时未在PageModel中发现的端点: Http Response 404 .Net核心RazorPages

当你在IIS 10上部署.NET Core Razor Pages应用程序时,如果遇到“未在PageModel中发现的端点”并且HTTP响应为404错误,这通常意味着IIS没有正确配置来处理ASP.NET Core应用程序。以下是一些基础概念、可能的原因以及解决方案:

基础概念

  • IIS (Internet Information Services): 微软的一个Web服务器软件,用于托管Web应用程序。
  • ASP.NET Core Razor Pages: 一种用于构建Web UI的框架,它使用Razor语法来简化页面的开发。
  • PageModel: Razor Pages中的一个类,用于处理页面的逻辑。

可能的原因

  1. 应用程序池配置不正确: IIS的应用程序池可能没有配置为使用正确的.NET Core运行时。
  2. web.config文件配置错误: 这个文件是IIS用来理解如何处理ASP.NET Core应用程序的关键。
  3. 文件系统权限问题: IIS进程可能没有足够的权限来访问应用程序文件。
  4. 缺少必要的组件: 在服务器上可能没有安装.NET Core Hosting Bundle。

解决方案

步骤1: 确认.NET Core Hosting Bundle已安装

确保服务器上安装了适用于你的.NET Core版本的Hosting Bundle。你可以从.NET官方网站下载它。

步骤2: 检查web.config文件

确保你的项目中的web.config文件配置正确。它应该包含以下内容:

代码语言:txt
复制
<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified"/>
    </handlers>
    <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%"
             stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout"
             hostingModel="InProcess"/>
  </system.webServer>
</configuration>

确保processPath指向你的应用程序的dotnet可执行文件路径。

步骤3: 配置应用程序池

  1. 打开IIS管理器。
  2. 在左侧导航栏中找到并双击“应用程序池”。
  3. 确保你的应用程序池设置为“无托管代码”或使用正确的.NET Core版本。

步骤4: 检查文件系统权限

确保IIS_IUSRS或相应的应用程序池标识具有对应用程序文件夹的读取和执行权限。

步骤5: 重启IIS

有时简单的重启IIS服务可以解决问题。你可以通过命令行使用以下命令重启IIS:

代码语言:txt
复制
iisreset

步骤6: 查看日志

检查应用程序的日志文件,通常位于项目的logs目录下,或者在IIS的日志文件中查找更多错误信息。

示例代码

如果你在PageModel中定义了一个端点,确保它被正确地标记了[BindProperty][HttpGet](或其他HTTP方法)属性。例如:

代码语言:txt
复制
public class IndexModel : PageModel
{
    [BindProperty]
    public string SearchTerm { get; set; }

    public void OnGet()
    {
        // 页面加载时的逻辑
    }

    public IActionResult OnPostSearch()
    {
        // 处理搜索逻辑
        return Page();
    }
}

确保对应的Razor页面中有相应的表单和操作:

代码语言:txt
复制
<form method="post">
    <input type="text" asp-for="SearchTerm" />
    <button type="submit">Search</button>
</form>

通过以上步骤,你应该能够解决在IIS 10上部署.NET Core Razor Pages应用程序时遇到的404错误。如果问题仍然存在,建议查看更详细的日志信息来进一步诊断问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何利用Serilog的RequestLogging来精简ASP.NET Core的日志输出

第1部分-使用Serilog RequestLogging来简化ASP.NET Core的日志输出(本篇文章) 第2部分-使用Serilog记录所选的端点名称[敬请期待] 第3部分-使用Serilog.AspNetCore...现在导航到默认主页会生成以下日志(这里注意,如果你现在使用ASP.NET Core3.1貌似Microsoft命名空间默认日志级别已经改为Warning): 是的,根本没有日志!...-URL,HTTP方法,时间信息,端点等-并且没有太多冗余。...显示的持续时间略短于Kestrel在后续消息中记录的值。这是可以预期的,因为Serilog仅在请求到达其中间件时才开始计时,而在返回时停止计时(在生成响应之后)。...INF] HTTP GET / responded 200 in 3.3341 ms [14:30:54 INF] HTTP GET /Missing responded 404 in 16.7119

1.7K10
  • 如何使用Serilog.AspNetCore记录ASP.NET Core3.0的MVC属性

    ,我描述了如何配置Serilog的RequestLogging中间件以向Serilog的请求日志摘要中添加其他属性(例如请求主机名或选定的端点名称)。...记录来自MVC的其他信息 就目前而言,ASP.NET Core中的一个特征是许多行为被MVC“基础结构”锁定在了MVC框架内部来实现。端点路由是采用MVC功能并将其下移到核心框架中的首要工作之一。...ASP.NET Core团队一直在努力将更多MVC特定功能(例如模型绑定或操作结果)从MVC中移除,然后“下推”到核心框架中。...我还将展示如何在page过滤器中添加RazorPages特定的值(如HandlerName)。 使用自定义过滤器记录MVC属性 过滤器相当于为每个请求运行的类似于MVC的微型中间件管道。....总结 默认情况下,当用Serilog的请求日志记录中间件替换ASP.NET Core基础结构中的日志记录时,您会丢失一些信息(与开发环境的默认配置相比)。

    3.6K10

    Serilog高级玩法之用Serilog记录所选终结点附加属性

    在本文中,我将展示如何向Serilog的摘要请求日志中添加其他元数据,例如请求的主机名,响应的内容类型或从ASP.NET Core 3.0中使用的终结点路由中间件所选择的端点名称。...,ActionId,ActionResult等 在这篇文章中,我将展示如何添加这些类别中的第一种,即与请求/响应相关的属性,在下一篇文章中,我将展示如何添加基于MVC / RazorPages的属性。...例如,在下图中(取自我的书《 ASP.NET Core in Action》),当响应“回传”到中间件管道时,在第5步写入日志: ?...”以及其他中间件(端点名称)设置的功能中检索值。...总结 默认情况下,用Serilog的请求日志记录中间件替换ASP.NET Core基础结构日志记录时,与开发环境的默认日志记录配置相比,您会丢失一些信息。

    1.7K10

    asp.net core 系列之Response caching(1)

    主要的用于缓存的HTTP头,是Cache-Control, 它被用于指定缓存指令。这个指令控制缓存行为,当请求从客户端到服务端的时候,并且当响应从服务端返回客户端的时候。...注意:Cache-Control,是用在从请求中的HTTP头,可以用来控制服务器中缓存行为。...当使用Response Caching 中间件时,开发者是没法对缓存行为控制的。因为中间件附着于官方缓存说明书。...Distributed Cache 分布式缓存 使用一个分布式缓存来存储数据在内存中,当应用部署在云上或者服务器集群上时。缓存是在这些处理请求的服务器之间共享的。...: PageModel { 用这个例子,使用浏览器工具观察response headers(响应头)。

    67720

    隐藏的OAuth攻击向量

    ,而且从当前HTTP请求查询中获取它们的值,因此如果用户直接导航到浏览器中的"/oauth/confirm_access"端点,则它可以从URL提供所有授权请求参数,并绕过"/authorize"页面上的检查...获取所有参数,并毒害模型/会话,现在当用户批准第一个请求时(因为"client_id"是可信的),授权令牌就会泄漏到恶意网站 注意:您可能会注意到第一个请求中的"redirectUri"与第二个请求中的...OpenID端点,因为它是由OpenID客户端应用程序使用的,并且这些请求不是从浏览器端发送的,规范规定"rel"参数的静态值应为"http://openid.net/specs/connect/1.0...这个端点的棘手部分是响应状态代码:如果参数无效或找不到用户名,它可能返回404,因此在将其添加到内容发现工具时要小心 [ForgeRock OpenAm] LDAP Injection in Webfinger...在源代码分析期间,我们发现当OpenAM服务器处理请求时,它将用户提供的资源参数嵌入到LDAP服务器的过滤器查询中,LDAP查询是在SmsLDAP对象.java文件: String[] objs = {

    2.9K90

    springCloud学习4(Netflix Hystrix弹性客户端)

    listOfServers: http://localhost:10011,http://localhost:10012 配置完毕后,访问/routes端点发现licensestatic/**...现在 x=连续访问localhost:5555//api/licensestatic/licensing/12,可以发现正常响应和 404 交替出现(10011 上能否访问成功,10012 报错 404...下图展示了在处理客户端请求时,各种过滤器时如何工作的: ?...这里我们实现一个后置过滤器,将许可证服务请求的响应内容打印到控制台上同时把idheader 插入到服务客户端请求的 response 中。...具体代码可以参考spring 微服务 获取当前请求路径 判断是否需要进行特殊路由 如需要进行特殊路由,在此进行 http 调用 将 http 调用的 response 写入到当前请求的 response

    1.3K30

    Go Web---Web服务器

    总结:第一个参数是请求的路径,第二个参数是当路径被请求时,需要调用的处理函数的引用。...错误请求头 考虑到例子的复杂性,这里先将例子进行拆分,一点点看: Logger 处理函数用 w.WriteHeader(404) 来输出 “404 Not Found”头部。...这其实SpringBoot Actuator功能类似,提供相关系统运行时参数,默认提供了很多默认监控端点,我们也可以通过expvar 包来加入我们自定义的监控端点....实例演示: package main import ( "expvar" "io" "log" "net/http" ) //暴露出我们自定义的监控端点 var helloRequests...VisitAll 函数迭代所有的标签(flag),打印它们的名称、值和默认值(当不同于“值” 时) package main import ( "flag" "fmt" "log" "net

    12K20

    小范笔记:ASP.NET Core API 基础知识与Axios前端提交数据

    ] 当前请求中的路由数据 [FromServices] 作为操作参数插入的请求服务 来一张 Postman 的图片: HTTP 请求中,会携带很多参数,这些参数可以在前端设置,例如表单、Header、...在微软官方文档,对于[Bind] 的解释: [Bind] 属性可用于防止“创建”方案中的过多发布情况 。...由于排除的属性设置为 NULL 或默认值,而不是保持不变,因此它在编辑方案中无法很好地工作; 因为 Bind 特性将清除未在 某个 参数中列出的字段中的任何以前存在的数据。 一脸懵逼。...Action 的参数:[Bind("A,B,C")] TestBind test,刚开始的时候我以为请求的数据中必须包含 A、B、C。 测试后发现不是。。。...再认真看了文档 :因为 Bind 特性将清除未在 某个 参数中列出的字段中的任何以前存在的数据。

    5.6K00

    springCloud学习4(Zuul服务路由)

    listOfServers: http://localhost:10011,http://localhost:10012 配置完毕后,访问/routes端点发现licensestatic/**...现在 x=连续访问localhost:5555//api/licensestatic/licensing/12,可以发现正常响应和 404 交替出现(10011 上能否访问成功,10012 报错 404...下图展示了在处理客户端请求时,各种过滤器时如何工作的: ?...这里我们实现一个后置过滤器,将许可证服务请求的响应内容打印到控制台上同时把idheader 插入到服务客户端请求的 response 中。...具体代码可以参考spring 微服务 获取当前请求路径 判断是否需要进行特殊路由 如需要进行特殊路由,在此进行 http 调用 将 http 调用的 response 写入到当前请求的 response

    94910

    flask 应用程序编程接口(API)最后一节

    由于应用程序中的资源都是相互关联的,因此此要求会要求将这些关系包含在资源表示中,盔甲客户端可以通过遍历关系来发现新资源,这几乎与你在Web应用程序中通过点击从一个页面到另一个页面的链接来发现新页面的方式相同...= status_code return response 该函数使用来自Werkzeug(Flask的核心依赖项)的HTTP_STATUS_CODES字典,它为每个HTTP状态代码提供一个替换的描述性名称...to_collection_dict()的最后两个参数是端点名称和id,id将在kwargs中作为一个额外关键字参数,然后在生成链接时将它传递给url_for()。...id,所以我可以加载指定的用户或返回404错误(如果发现)。...保护这些API端点的最明显的方法是使用Flask-Login中的@login_required装饰器,但是这种方法存在一些问题。装饰器检测到未通过身份验证的用户时,可以将用户重定向到HTML登录页面。

    5K10

    使用 .NET Core 中的超时中间件提高 UI 性能

    今天带来了 .NET Core 的新文章 Timeout 中间件,让我们了解一下,看看我们可以实时应用哪些地方。 实时用例 在实时应用程序(如金融交易平台)中,及时响应至关重要**。...例如,WebSockets、静态文件和调用昂贵的 API 都需要不同的超时限制。因此,ASP.NET Core 提供了配置每个终端节点的超时以及全局超时的中间件。...提升用户体验: 当请求无法在合理的时间范围内完成时,向用户提供及时的反馈。 保持应用程序响应能力: 通过终止超过特定持续时间的请求来保持应用程序的响应。...当达到超时限制时,HttpContext.RequestAborted 中的 CancellationToken 会将 IsCancellationRequested 设置为。...,这意味着如果任何端点的超时时间超过 5 秒,将调用异常。

    13810

    OIDC认证授权的核心知识——高级开发必备

    OIDC协议簇图谱 Core[2] OIDC核心,定义了OIDC的核心流程, 如何在 OAuth 2.0 之上的身份验证以及使用声明来传达有关最终用户(EU)的信息 。...Discovery[3] 定义客户端如何动态发现有关 OpenID 提供者(OP)的信息。 Dynamic Registration[4] 定义客户端如何动态注册到 OpenID 提供者。...OAuth 2.0 Form Post Response Mode[6] 定义如何通过User Agent使用 HTTP POST 自动提交的 HTML 表单值返回 OAuth 2.0 授权响应参数...❝还有一些草案正在孵化中,这里就不多介绍了。 OIDC核心流程 OIDC 被抽象为以下5个步骤,如图: OIDC流程图 ① RP(客户端)向 OpenID 提供者(OP)发送请求。...④ RP 可以向 UserInfo 端点发送带有访问令牌的请求。 ⑤ UserInfo 端点返回有关最终用户的claims。

    5.4K41

    API OWASP 标准

    API 管理 API 通过 API 管理发布 API 在开发人员门户中可见 API 只能通过 API 管理网关访问 请求 API 时强制执行速率限制 对 API 进行更改时会自动维护规范 针对标准规范的每次更改验证端点规范...主版本在 URI 中(仅当 API 管理平台不支持基于客户端订阅的版本控制时) API 使用无状态处理(无会话,OpenID 连接令牌是可以的) 没有特殊处理(异步事件) HTTP 方法 GET -...HTTP 状态码 404 用于错误的 URL 400 -responses 有特定错误的附加信息(例如缺少必需的属性) 当 API 使用者使用错误的凭证时使用 401 -response 403 使用有效但请求...API 使用者无法访问的端点或尝试使用他们不允许执行的操作 500 - 当存在 API 使用者无法通过更改请求来解决的内部处理问题时响应 500 -responses 具有特定于应用程序的错误代码...POST: 200 OK 更新或提交而不创建新资源 201 -response 结合创建资源的标识符 DELETE: 204 OK 删除资源成功时 本土化 带有时区的 UTC 日期和时间格式(ISO

    2.6K20

    Fetch vs Axios

    Fetch和Axios都是基于promise的HTTP客户端。这意味着当我们使用它们来创建网络请求时,它们会返回一个resolve或者reject的promise。...我们需要序列化我们的数据到JSON字符串中。当我们使用POST方法将JS对象发送到API,Axios会自动将数据字符串化。...如果我们收到404错误或任何其他HTTP错误,Fetch将不会拒绝一个promise。Fetch只有在网络请求失败时拒绝promise。所以我们必须在.then子句中手动处理HTTP错误。...在我们碰到一个错误的URL端点的情况下,ok和status属性将分别变成false和404,然后我们抛出一个错误,.catch()子句将显示我们自定义的错误信息。...在下面的代码片段中,我们的目标是在请求时间超过4秒时终止请求,然后在控制台中打印一个错误。

    1.3K10

    ASP.NET Core教程【三】实体字段属性、链接标签、并发数据异常、文件上传及读取

    前文索引: ASP.NET Core教程【二】从保存数据看Razor Page的特有属性与服务端验证 ASP.NET Core教程【一】关于Razor Page的知识 实体字段属性 再来看看我们的实体类...id=2 现在我们分别打开Edit.cshtml、Details.cshtml、Delete.cshtml 把页面中的第一个命令:@page,修改为:@page "{id:int}" 重新编译运行,发现上面的链接变成了...如果这个时候你请求这个地址: http://localhost:5000/Movies/Details 并没有传入ID的值,那么服务器会返回404, 如果你的设计是希望ID是一个可选的传入参数,那么你可以把.../Index");} 上面代码中DbUpdateConcurrencyException就是专门针对这种异常定义的异常类; NotFound方法将返回404异常 文件上传及读取 如果你想上传一个文件,可以撰写如下...; 当表单提交后,ASP.NET CORE 也会把文件流绑定到这个字段上; 如果上传的是一个文本文件,那么我们看看怎么直接读取这个文本文件; public static async Task<string

    1.6K60

    ASP.NET Core的身份认证框架IdentityServer4(7)- 使用客户端认证控制API访问

    前言 今天(2017-9-8,写于9.8,今天才发布)一口气连续把最后几篇IdentityServer4相关理论全部翻译完了,终于可以进入写代码的过程了,比较累。...为此你需要为你的解决方案添加一个控制台应用程序。 IdentityServer 上的令牌端点实现了 OAuth 2.0 协议,你应该使用合法的 HTTP请求来访问它。...IdentityModel 包含了一个用于 发现端点 的客户端库。...这样一来你只需要知道 IdentityServer 的基础地址,实际的端点地址可以从元数据中读取: // 从元数据中发现端口 var disco = await DiscoveryClient.GetAsync...为了发送访问令牌到 API,你一般要使用 HTTP 授权 header。

    3.4K40

    一个Mini的ASP.NET Core框架的实现

    ,重点讲解了7个核心对象,围绕ASP.NET Core最核心的本质—由服务器和若干中间件构成的管道来介绍。...本文基于蒋金楠老师的那篇博客,基于学习者的视角Run一遍这个ASP.NET Core Mini框架,一步一步地了解它的流程,了解中间件在ASP.NET Core中的作用。...构造好了WebHost之后,便会启动这个WebHost,启动这个WebHost的核心就在于启动刚刚注册的Server,让它绑定指定的端口开始监听(这部分内容涉及到Socket网络程序,不熟悉的朋友可以看看我的这一篇...需要注意的就是在BazMiddleware中,没有调用下一个中间件,因此404中间件便不会得到触发处理的机会。 ?   下图是最后的执行结果: ?...,了解了这一点,就对ASP.NET Core的核心本质有了大概印象。

    1.1K20
    领券